Quelle base de données choisir ?

Bonjour,
Dans mon cadre professionnel je suis actuellement entrain de définir les choix techniques pour un nouveau logiciel. Cependant une question ce pose à moi: Quel base de données choisir ?

Je suis un développeur PHP de première heure et obligé dans le cadre de mon travail cependant j’ai déjà testé Ruby (Rails) pour me faire ma propre idée sur cette vague rouge :p

Pour le moment j’ai toujours eu location de travailler avec Mysql. Cependant je me dit qu’il est temps de voir, découvrir si il ne ce fait pas mieux de nos jours. J’entend parler de beaucoup de chose comme MariaDB (fork de mysql), de PostgreSQL, du NoSQL. Je n’arrive pas à trouver sur le net des comparatifs pertinents et récents entre les différents moteurs de base de données. En effet je pense qu’il est nécessaire de prendre plusieurs facteur en compte lors d’un choix de BDD (rapidité, fiabilité, apprentissage, installation, outils d’administration, communauté etc…)

Avez-vous un retour d’expérience sur l’utilisation d’une base de données ?

Salut,

MariaDB à un support complet de MySQL, donc pas de problème de compatibilité (en tout cas j’en ai jamais rencontré).

Contrairement à MySQL MariaDB est réellement libre, mieux codé, mieux optimisé et a des fonctionnalités supplémentaires. (cf: le site de MariaDB et les nombreux benchmark).
J’utilise MariaDB à la place de MySQL depuis quelques années, ça marche bien.

Pour le noSQL, MongoDB est très répandu, niveau performance rien à dire, l’apprentissage est facile (juste qu’il faut casser les habitudes acquises avec une base relationnelle, ce n’est pas rien).

Redis supporte la persistence http://redis.io/topics/persistence

CouchDB pour API REST, c’est pas mal aussi.

Hello,

Si tu n’as jamais utilisé une BDD NoSQL, mieux vaut ne pas commencer dans le cadre de ton travail. Si ton choix se révèle être mauvais, ça va être très long et couteux de changer.

Comme @web le dit, si tu connais MySQL alors MariaDB est super pour tous les points qu’il a abordé.

Dans mon cas, après avoir utilisé MySQL pendant des années, puis MongoDB pendant 2 ans, je n’utilise quasiment plus que PostgreSQL. C’est familier pour quelqu’un qui a déjà utilisé MySQL et il y a plein de fonctionnalités que je trouve vraiment intéressantes (le support de JSON et des arrays par exemple). Ca m’a même redonné envie d’écrire des requêtes SQL !

1 « J'aime »

Merci pour vos réponses !

Le choix ce fait donc entre MariaDB et PostgreSQL. J’ai entendu dire que la configuration de postegreSQL était plus compliqué afin d’atteindre des niveaux de performances équivalent à MariaDB. Est ce vrai ?

Le logiciel utilisera surement Symfony et donc doctrine (oui je sais les anti-PHP hurle déjà :p) est ce que cela peu jouer dans la balance ?

PostgreSQL est vraiment très bon : fiable, excellente documentation, des fonctionalités avancées. Je ne vais pas faire de comparaison avec MySQL, car je la connais moins bien, mais en tout cas PostgreSQL est un bon choix.

J’ai envie de répondre “ca dépend” :)

Pour le boulot, j’ai tendance à choisir les outils que je connais/maîtrise. Lorsqu’on découvre de nouveaux produits, on a souvent tendance à tomber dans le filet du marketing et l’on oublie toute l’expérience que l’on a gagné à utiliser/installer/configurer/optimiser/maintenir l’ancien produit. On se focalise sur quelques benchmarks (très souvent inutiles car trop pointilleux) et l’on ne pense pas aux problèmes d’installation et configuration de ce nouveau produit. A chaque fois que j’ai fait le choix du nouveau produit, j’ai perdu plus de temps que j’en ai gagné…

Par ailleurs, comme l’on dit @Nicolab et @nicolasmerouze, passer à MariaDB va t’apporter de meilleures performances et quelques nouvelles fonctionnalités tout en capitalisant sur tes connaissances de MySQL. Que du bonheur ;)

La seule raison pour laquelle je choisirais PostgreSQL serait pour une fonctionnalité coeur au problème que ton application va résoudre et qui n’existe pas encore ou qui est plus limitée dans MariaDB.

Ce qui va jouer dans la balance est que certains bundles symfony peuvent ne pas supporter PostgreSQL. Doctrine est censé palier à ça mais il peut arriver qu’il y ait des requêtes qui utilisent des choses spécifiques à MySQL.

Comme MySQL est le moteur le plus répandu, ça peut jouer. Quand je dis MySQL ça englobe MariaDB évidemment.

Concernant la perf, je vais lacher un petit troll désolé mais on parle de symfony et Doctrine, quoi qu’on fasse la perf est vraiment pas top.

protip: Si c’est pour ta boite et qu’elle est riche, je te conseille Oracle. Mais avant, suis cette démarche:

  • Appelle leurs commerciaux et négocie ce qu’ils te paieront en retour si tu choisis leur base
  • Fait de même avec la boite qui te fournira le serveur pour faire tourner le bastringue
  • Convainc ton boss que tu as fait le meilleur choix en lui montrant quelles grosses boites ont fait pareil. En plus cela te dédouanera de toute responsabilité
  • Enfin met toi à l’abri en cherchant immédiatement un autre job ou cas où les choses tourneraient mal. Note qui si tu as bien suivi les deux premiers points, tu devrais t’être fait des amis.

Désolé je n’ai pas pu m’empêcher, je sors.

Je vais plus ou moins paraphraser oncle bob (Robert C. Martin), mais lorsque tu établis une architecture, le choix de la persistance de données (ou toute autre techno) doit être repoussée au maximum, histoire de laisser le besoin driver les choix.
Je continue à citer oncle bob avec l’exemple de Fitness qui est un wiki dont le but est la définition et l’exécution de tests fonctionnels. L’une des premières questions qu’ils se sont posés était : quelle base de données utiliser ? MySQL probablement ? Puis ils se sont dit qu’ils allaient commencer à coder le modèle de données et qu’ils verraient plus tard. Un beau jour, ils ont eu besoin d’un endroit où stocker leurs pages wiki. A ce moment là, ils ont opté pour l’implem la plus simple qui répondait au besoin : en mémoire, dans une map. Les devs ont continué et ils ont du faire face au besoin de l’arrêt et redémarrage de leur outil. Question : quel est la plus simple implem ? En fichiers sur le FS.
Au final, quelques années plus tard, Fitness est fonctionnel et ne nécessite aucune base de données d’installée. Une implem de la persistance des pages est proposée en base de données sous forme d’un plugin, mais il ne s’agit que d’une extension communautaire qui est apparue lorsqu’un client est venu avec un besoin corporate où toutes les données des applications devaient être stockées dans une base Oracle.

Maintenant, si c’est pour de la formation, je pense qu’avoir une vision à peu près globale des différentes bases de données, ainsi que les points fort et faibles de chacune peut permettre à terme, en fonction des besoins projets, de faciliter le choix d’implem lorsqu’il devra être fait.

Il faudrait un peu nuancer l’expérience uncle bob : Fitnesse c’est son bac à sable et son unique source d’exemple pour ses conf et ses bouquins. Il y a des grosses pointures qui ont codé dessus. Ce n’est pas le projet lambda. Je dis ça tout en adorant l’approche et en m’y inspirant au quotidien. Aujourd’hui, dans les entreprises, le provisioning ça existe encore et les serveurs et licences sont achetés avant les phases de dev. Laissons les architectes foutre la zone avant le début des projets !

Pour apporter mes 2 cents à l’op, si c’est pour connecter la base avec du php, autant partir sur du mariadb. Postgresql est plus versatile mais aussi plus chiant à installer, configurer et exploiter : on se rapproche plus du sgbd Oracle compliqué.
Le SQL, c’est bien car polyvalent. Les systèmes Nosql sont super intéressants mais leurs usages sont plus restrictifs (ex pas d’ACID, performances différentes en lecture et en écriture…)

Ceci je le mettrais pas dans le coté restrictif vue que c’est le point fort du NoSQL :)

OK, disons que c’est une particularité des bases Nosql alors :-)

Merci pour vos messages !
Je pense que je vais opter pour mariaDB. Cela me semble le meilleur compromis !

Bonjour,

j’aimerais juste ajouter que le choix d’un modèle de base de donnée dépend principalement des besoins de l’application développé. Chaque modèles ont leurs avantages et inconvénients. Je vais pas revenir sur les modèles relationnels et leurs SGBD mais en ce qui concerne le modèle NoSQL les principaux acteurs peuvent s’appliquer (pour un environnement distribué et/ou pour des besoins de scalabilité) ainsi :

  • Hbase : polyvalent pour une base de donnée orienté Colonne
  • MongoDB : polyvalent pour une base de donnée orienté Document
  • Redis : pour les sessions
  • Neo4j : pour les graphs
  • Elasticsearch : pour la recherche et l’analyse de donnée en complément d’une base de donnée métier (Elasticsearch n’est pas a utiliser en temps que base de donnée mais comme outils d’accès aux données)
  • DynamoDB : cette base de donnée ne semble pas apporter de réel intérêts par rapport aux autres solutions, il n’est a envisager uniquement dans le cadre d’un hébergement Cloud chez Amazon

Grossièrement, le NoSQL est apparus car le modèle relationnel ne permettait pas de travailler sur des architecture distribuée. Je pense que pour ce qui est du modèle NoSQL le choix, dans la majorité des cas, ce fera entre Hbase et MongoDB. Concernant Elasticsearch il peut être intégrer à l’ensemble des applications en plus de la base de donnée (relationnelle ou NoSQL).

1 « J'aime »
Human Coders - Le centre de formation recommandé par les développeur·se·s pour les développeur·se·s