Bonjour à tous,
Dans l'optique d'une refonte total d'une plateforme (importante) existante, j'étudie actuellement mongoDB pour potentiellement l'utilisé combiné à MySQL (la partie relationnel me semble indispensable).
Le problème que nous avons aujourd'hui une BDD MySQL qui est souvent le goulot d'étranglement. Certaines tables contiennent 100 000 000 d'enregistrement voir plus, et les requêtes pour traiter ces données deviennent bien trop longue ! (on compte parfois en heure...)
Outre le fait de totalement revoir la structure de la BDD, ainsi que le coté hardware (en mettant en place un cluster SQL), je souhaite également étudier le NoSQL, qui me semblait adapté pour remplacer ces tables. Pour résumé, c'est tables qui stocks une visite liée à un utilisateur et à un compte, le tout daté + quelques autres infos.
Du coup, je me suis lancé dans des tests, en me basant sur ca :
https://github.com/webcaetano/mongo-mysql
Sur ces tests, on voit que MySQL est plus performant que Mongo. Rien d'étonnant puisqu'en SQL il fait un JOIN, la ou en NoSQL, il boucle autant de fois qu'il y'a d'enregistrement dans la première table.
J'ai donc revu ce test moi même :
J'ai donc un document type de ce genre (données générées aléatoirement) :
avec 10 millions d'enregistrements.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 { "_id" : { "$oid" : "56669929548e2b4105ca4572" }, "player" : "Alicia Goyette MD", "email" : "Clarabelle@llewellyn.co.uk", "score" : 222, "team" : 480383, "date" : { "$date" : "2014-11-07T22:47:37.000+0000" } }
et de l'autre coté une table équivalente en MySQL.
En MySQL, j'effectue la requête suivante :
qui s'execute en 5 089ms (environ 14 000 ms si je fais un SELECT * FROM test WHERE score >= 800)
Code : Sélectionner tout - Visualiser dans une fenêtre à part SELECT player, score FROM test WHERE score >= 800
En mongo, j'ai ca :
qui s'execute en 27 189ms !!!
Code : Sélectionner tout - Visualiser dans une fenêtre à part db.test.find({score:{$gte : 800}})
Le NoSQL, dans ces conditions, n'est-il pas censé être plus performant ?
J'ai manqué quelque chose ?
Merci pour votre aide.
Partager