IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

NoSQL Discussion :

Performance MongoDB vs MySQL, resultat étonnant


Sujet :

NoSQL

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 7
    Points : 5
    Points
    5
    Par défaut Performance MongoDB vs MySQL, resultat étonnant
    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) :
    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" } 
    }
    avec 10 millions d'enregistrements.

    et de l'autre coté une table équivalente en MySQL.

    En MySQL, j'effectue la requête suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT player, score FROM test WHERE score >= 800
    qui s'execute en 5 089ms (environ 14 000 ms si je fais un SELECT * FROM test WHERE score >= 800)

    En mongo, j'ai ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    db.test.find({score:{$gte : 800}})
    qui s'execute en 27 189ms !!!



    Le NoSQL, dans ces conditions, n'est-il pas censé être plus performant ?
    J'ai manqué quelque chose ?

    Merci pour votre aide.

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 088
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 088
    Points : 38 393
    Points
    38 393
    Billets dans le blog
    9
    Par défaut
    bonjour,

    Vous n'avez pas communiqué les index de votre table, si le where n'est pas filtrant ou qu'il ne correspond à aucun index, vous procédez à un tablescan
    En ce cas 5 secondes pour 10 millions de lignes reste une valeur raisonnable.

    Pourquoi n'envisagez pas d'autres SGBD R, comme MS-SQL server, Oracle ou DB2, qui sont autrement plus capables de supporter des volumes conséquents que MySQL (et offrent bien d'autres fonctionnalités que celui-ci)

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    Effectivement, je n'ai pas mis d'index, que ce soit en MySQL ou mongo. Ce qui m'étonne, c'est les 27s de mongo. Les 5s de MySQL ne me choque pas outre mesure.

    Pour les autres SGBD, c'est simplement une question de coût/licence. On a racheté une boite qui avait oracle, et le patron nous a contraint de passer sous MySQL (galère!) pour des raisons de licences... Donc on va clairement pas retourner sur quelque chose de payant

  4. #4
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 088
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 088
    Points : 38 393
    Points
    38 393
    Billets dans le blog
    9
    Par défaut
    Il existe une version gratuite de SQL server (express) qui supporte déjà des volumes conséquents et des fonctionnalités très supérieures à MySQL

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    Je ne connaissais pas la version gratuite de MS SQL, je vais regarder, même si il est peu probable que nous le retenons : nous avons des infra linux, il faudrait donc un ou des serveurs windows (et leur licences), et également maintenir ces serveurs, que nous ne maîtrisons pas bien...

  6. #6
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 088
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 088
    Points : 38 393
    Points
    38 393
    Billets dans le blog
    9
    Par défaut
    D'autres seront plus qualifiés que moi pour préciser les conditions, mais je ne crois pas qu'il y ait de restrictions à faire fonctionner SQL-server sur un poste Linux

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    Merci pour ton aide
    J'ai regardé vite fait pour du MS SQL sous linux, et ca semble pas gagné. Y'a bien un gars qui l'a fait en 2012, mais via une couche de virtualisation. Quid des perfs...

    D'autres avis ?

  8. #8
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 736
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 736
    Points : 52 447
    Points
    52 447
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par EnergieZ Voir le message
    Merci pour ton aide
    J'ai regardé vite fait pour du MS SQL sous linux, et ca semble pas gagné. Y'a bien un gars qui l'a fait en 2012, mais via une couche de virtualisation. Quid des perfs...

    D'autres avis ?
    Effectivement pas bon....

    mais en revanche, le prix des licences Windows est assez faible, en tout cas presque moins cher qu'un abonnement à une hot line Linux !

    En sus vous avez la version WEB de SQL Server qui est en mode SPLA (hébergement) et très peu cher et enfin, la version SQL Azure Database ou vous payez un service et non plus une licence à la consommation, et donc le cout global s'avère souvent moins cher que de gérer son infra soi même avec tout ce qui va avec : hardware, dba, ingé système, haute dispo....

    A -
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  9. #9
    Membre extrêmement actif Avatar de ddoumeche
    Homme Profil pro
    Ingénieur recherche et développement
    Inscrit en
    Octobre 2007
    Messages
    1 676
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Singapour

    Informations professionnelles :
    Activité : Ingénieur recherche et développement

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 676
    Points : 2 010
    Points
    2 010
    Par défaut
    Citation Envoyé par EnergieZ Voir le message
    En MySQL, j'effectue la requête suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT player, score FROM test WHERE score >= 800
    qui s'execute en 5 089ms (environ 14 000 ms si je fais un SELECT * FROM test WHERE score >= 800)

    Le NoSQL, dans ces conditions, n'est-il pas censé être plus performant ?
    Quid d'un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT count(player) FROM test WHERE score >= 800
    Combien retournez-vous de lignes ?

    Le NoSQL permet de faire tout mieux que le reste et son contraire également.....
    La joie de l'âme est dans la planification -- Louis Hubert Liautey

Discussions similaires

  1. Réponses: 1
    Dernier message: 28/03/2014, 15h15
  2. Problème performance sous requête MySQL
    Par Razielwar dans le forum Requêtes
    Réponses: 17
    Dernier message: 23/02/2012, 13h11
  3. Performances comparatives de MySQL
    Par pat06 dans le forum Requêtes
    Réponses: 0
    Dernier message: 22/01/2008, 19h12
  4. [MySQL] résultat respectant l'ordre de la clause WHERE OR ?
    Par gueridon dans le forum Langage SQL
    Réponses: 7
    Dernier message: 26/08/2007, 01h18
  5. Usage de l'Api MySQL (resultat en fct du nom de colonne)
    Par schneed dans le forum C++Builder
    Réponses: 2
    Dernier message: 10/01/2006, 20h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo