MongoDB était-il le bon choix?

J'ai récemment découvert que Red Hat supprimait le support MongoDB du Satellite (disent-ils en raison de changements de licence). Cela m'a fait penser que ces dernières années, j'ai vu un tas d'articles à quel point MongoDB est terrible et que personne ne devrait jamais l'utiliser. Mais pendant ce temps, MongoDB est devenu un produit beaucoup plus mature. Que s'est-il passé? Toute la haine est-elle vraiment due à des erreurs au début de la commercialisation d'un nouveau SGBD? Ou les gens utilisent-ils simplement MongoDB au mauvais endroit?

Si vous avez soudain l'impression que je protège MongoDB, veuillez lire l' avertissement à la fin de l'article.

Nouvelle tendance


Je travaille dans l'industrie du logiciel depuis plus que suffisamment de temps pour parler décemment, mais tout de même, seule une petite partie des tendances qui ont frappé notre industrie représentait pour moi. J'ai assisté à la croissance de 4GL, AOP, Agile, SOA, Web 2.0, AJAX, blockchain ... la liste est interminable. Chaque année, de nouvelles tendances apparaissent. Certains disparaissent rapidement, tandis que d'autres modifient fondamentalement la façon dont les logiciels sont développés.

Autour de chaque nouvelle tendance, une certaine excitation générale se crée: les gens sautent dans le bateau ou voient le bruit généré par les autres - et suivent la foule. Ce processus est codifié par Gartner dans un cycle de battage médiatique . Bien que controversé, ce graphique décrit approximativement ce qui arrive aux technologies avant qu'elles ne deviennent finalement utilisables.

Mais de temps en temps, une nouvelle innovation apparaît (ou arrive une seconde venue, comme dans ce cas), entraînée par une seule implémentation spécifique. Dans le cas de NoSQL, le battage médiatique a été fortement stimulé par l'avènement et l'essor rapide de MongoDB. MongoDB n'a pas lancé cette tendance: en fait, les grandes sociétés Internet ont commencé à avoir des problèmes de traitement de grandes quantités de données, ce qui a conduit au retour de bases de données non relationnelles. Le mouvement général a commencé avec des projets tels que Bigtable de Google et Cassandra de Facebook, mais c'est MongoDB qui est devenu l'implémentation la plus célèbre et la plus abordable de la base de données NoSQL, à laquelle la plupart des développeurs avaient accès.

Remarque: vous pourriez penser que je mélange des bases de données de documents avec des bases de données de colonnes, des magasins de clés / valeurs ou l'un des nombreux autres types de magasins de données qui relèvent de la définition générale de NoSQL. Et tu as raison. Mais à cette époque, le chaos régnait. Tout le monde était obsédé par NoSQL, tout le monde en avait absolument besoin, bien que beaucoup ne voient pas les différences entre les différentes technologies. Pour beaucoup, MongoDB est devenu synonyme de NoSQL.

Et les développeurs l'ont attaquée. C'était une idée assez tentante d'avoir une base de données sans schéma qui évolue comme par magie pour résoudre n'importe quel problème. Vers 2014, il semblait que partout où une base de données relationnelle était utilisée il y a un an, comme MySQL, Postgres ou SQL Server, les bases de données MongoDB ont commencé à se déployer. À la question de savoir pourquoi, vous pourriez obtenir une réponse du banal «c'est l'échelle du web» au plus réfléchi «mes données sont très mal structurées et s'intègrent bien dans la base de données sans schéma».

Il est important de se rappeler que MongoDB et les bases de données de documents résolvent généralement un certain nombre de problèmes avec les bases de données relationnelles traditionnelles:

  • SchĂ©ma strict : avec une base de donnĂ©es relationnelle, si vous avez des donnĂ©es gĂ©nĂ©rĂ©es dynamiquement, vous ĂŞtes obligĂ© de crĂ©er un tas de colonnes de donnĂ©es alĂ©atoires "diffĂ©rentes", d'y pousser des objets blob de donnĂ©es ou d'utiliser la configuration EAV ... tout cela a des inconvĂ©nients importants.
  • La difficultĂ© de la mise Ă  l'Ă©chelle : s'il y a tellement de donnĂ©es qu'elles ne tiennent pas sur un seul serveur, MongoDB a proposĂ© des mĂ©canismes pour les mettre Ă  l'Ă©chelle sur plusieurs machines.
  • Modifications de circuits sophistiquĂ©es : pas de migrations! Dans une base de donnĂ©es relationnelle, changer la structure de la base de donnĂ©es peut ĂŞtre un Ă©norme problème (surtout quand il y a beaucoup de donnĂ©es). MongoDB a Ă©tĂ© en mesure de simplifier considĂ©rablement le processus. Et cela l'a rendu si facile que vous pouvez simplement mettre Ă  jour le circuit en dĂ©placement et avancer très rapidement.
  • Performances d' enregistrement : les performances de MongoDB Ă©taient bonnes, en particulier avec un rĂ©glage correct. MĂŞme la configuration MongoDB prĂŞte Ă  l'emploi, pour laquelle elle a souvent Ă©tĂ© critiquĂ©e, a montrĂ© des mesures de performances impressionnantes.

Tous les risques sont sur vous.


Les avantages potentiels de MongoDB étaient énormes, en particulier pour certaines classes de problèmes. Si vous lisez la liste ci-dessus sans comprendre le contexte et sans expérience, vous pourriez avoir l'impression que MongoDB est vraiment un SGBD révolutionnaire. Le seul problème était que les avantages ci-dessus étaient accompagnés d'un certain nombre de réserves, dont certaines sont énumérées ci-dessous.

En toute justice, personne chez 10gen / MongoDB Inc. il ne dira pas que ce qui suit n'est pas vrai, c'est juste un compromis.

  • Perte de transactions : les transactions sont une caractĂ©ristique majeure de nombreuses bases de donnĂ©es relationnelles (pas toutes, mais la plupart). Transactionnel signifie que vous pouvez effectuer plusieurs opĂ©rations de manière atomique et garantir que les donnĂ©es resteront cohĂ©rentes. Bien sĂ»r, avec une base de donnĂ©es NoSQL, la transactionnalitĂ© peut ĂŞtre dans le mĂŞme document, ou vous pouvez utiliser des validations en deux phases pour obtenir la sĂ©mantique transactionnelle. Mais vous devez implĂ©menter cette fonctionnalitĂ© vous-mĂŞme ... ce qui peut ĂŞtre une tâche complexe et longue. Souvent, vous n'ĂŞtes pas conscient du problème jusqu'Ă  ce que vous constatiez que les donnĂ©es de la base de donnĂ©es tombent dans des Ă©tats inacceptables, car il est impossible de garantir l'atomicitĂ© des opĂ©rations. Remarque: beaucoup m'ont dit que les transactions Ă©taient apparues dans MongoDB 4.0 l'annĂ©e dernière, mais avec un certain nombre de limitations. La conclusion de l'article reste la mĂŞme: Ă©valuer comment la technologie rĂ©pond Ă  vos besoins.
  • Perte d'intĂ©gritĂ© relationnelle (clĂ©s Ă©trangères) : s'il existe une relation dans vos donnĂ©es, vous devez l'appliquer dans l'application. Le fait d'avoir une base de donnĂ©es conforme Ă  ces relations supprimera une partie importante du travail de l'application et, par consĂ©quent, de vos programmeurs.
  • Manque de capacitĂ© Ă  appliquer la structure des donnĂ©es : les schĂ©mas stricts deviennent parfois un gros problème, mais c'est aussi un mĂ©canisme puissant pour une bonne structuration des donnĂ©es, s'il est utilisĂ© correctement. Les bases de donnĂ©es de documents telles que MongoDB offrent une flexibilitĂ© de schĂ©ma incroyable, mais cette flexibilitĂ© Ă©limine la responsabilitĂ© de garder les donnĂ©es propres. Si vous ne vous en occupez pas, vous devrez finalement Ă©crire beaucoup de code dans l'application pour tenir compte des donnĂ©es qui ne sont pas stockĂ©es sous la forme que vous attendez. Comme notre entreprise le dit souvent Simple Thread ... un jour, l'application sera réécrite et les donnĂ©es vivront pour toujours. Remarque: MongoDB prend en charge la validation de schĂ©ma: il est utile, mais n'offre pas les mĂŞmes garanties que dans une base de donnĂ©es relationnelle. Tout d'abord, l'ajout ou la modification d'une vĂ©rification de schĂ©ma n'affecte pas les donnĂ©es existantes dans la collection. Vous devez vous-mĂŞme vous assurer de mettre Ă  jour les donnĂ©es conformĂ©ment au nouveau schĂ©ma. DĂ©cidez par vous-mĂŞme si cela suffit Ă  vos besoins.
  • Langage de requĂŞte natif / perte de l'Ă©cosystème d'outils : l'avènement de SQL est devenu une rĂ©volution absolue, et rien n'a changĂ© depuis lors. C'est un langage incroyablement puissant, mais aussi assez complexe. La nĂ©cessitĂ© de concevoir des requĂŞtes de base de donnĂ©es dans un nouveau langage composĂ© de fragments JSON est considĂ©rĂ©e comme un grand pas en arrière par les personnes ayant de l'expĂ©rience avec SQL. Il existe tout un univers d'outils qui interagissent avec les bases de donnĂ©es SQL: de l'IDE aux outils de reporting. AccĂ©der Ă  une base de donnĂ©es qui ne prend pas en charge SQL signifie que vous ne pouvez pas utiliser la plupart de ces outils ou que vous devez convertir les donnĂ©es en SQL pour les utiliser, et cela peut ĂŞtre plus difficile que vous ne le pensez.

De nombreux développeurs qui se sont tournés vers MongoDB n'ont pas vraiment compris les compromis et ont souvent plongé tête baissée, le configurant comme le principal magasin de données. Après cela, il était souvent incroyablement difficile de revenir en arrière.

Qu'est-ce qui aurait pu être fait différemment?


Tout le monde n'a pas sauté la tête la première et a touché le fond. Mais de nombreux projets ont installé la base MongoDB là où elle ne convenait tout simplement pas - et ils devront vivre avec elle pendant encore de nombreuses années. Si ces organisations avaient passé un certain temps et considéré méthodiquement le choix des technologies, beaucoup auraient fait un choix différent.

Comment choisir la bonne technologie? Il y a eu plusieurs tentatives pour créer un cadre systématique d'évaluation de la technologie, comme «Un cadre pour la mise en œuvre de la technologie dans les organisations de logiciels» et «Un cadre pour évaluer les technologies logicielles» , mais il me semble que c'est une complexité inutile.

De nombreuses technologies peuvent être raisonnablement évaluées en posant seulement deux questions fondamentales. Le problème est de trouver des personnes qui peuvent y répondre de manière responsable, en passant du temps à chercher des réponses et sans parti pris.

Si vous ne rencontrez aucun problème, vous n'avez pas besoin d'un nouvel outil. Le point.

Question 1: Quels problèmes essaie-je de résoudre?


Si vous ne rencontrez aucun problème, vous n'avez pas besoin d'un nouvel outil. Le point. Pas besoin de chercher une solution et de trouver un problème. Si vous n'avez pas rencontré de problème qu'une nouvelle technologie ne résout pas beaucoup mieux que votre technologie existante, alors il n'y a rien à discuter. Si vous envisagez d'utiliser cette technologie parce que vous avez vu comment les autres l'utilisent, réfléchissez aux problèmes auxquels ils sont confrontés et demandez-leur si vous en avez. Il est facile d’accepter la technologie car d’autres l’utilisent, la difficulté est de comprendre si vous rencontrez les mêmes problèmes.

Question 2: Qu'est-ce que je perds?


C'est certainement une question plus difficile, car il faut creuser et bien comprendre les anciennes et les nouvelles technologies. Parfois, vous ne pouvez pas vraiment comprendre un nouveau jusqu'à ce que vous construisiez quelque chose avec ou que vous ayez un employé avec une telle expérience.

Si vous n'avez ni l'un ni l'autre, alors il est logique de penser à l'investissement minimum possible pour déterminer la valeur de cet outil. Et si vous faites un investissement, sera-t-il difficile d'inverser la décision?

Les gens gâchent toujours tout


En essayant de répondre à ces questions le plus impartialement possible, souvenez-vous d'une chose: vous devez lutter avec la nature humaine. Il existe un certain nombre de biais cognitifs qui doivent être surmontés pour évaluer efficacement la technologie. Voici quelques exemples:

  • L'effet de rejoindre la majoritĂ© - tout le monde le sait, mais il est toujours difficile de se battre avec. Assurez-vous simplement que la technologie correspond vraiment Ă  vos besoins rĂ©els.
  • L'effet de la nouveautĂ© - de nombreux dĂ©veloppeurs ont tendance Ă  sous-estimer les technologies avec lesquelles ils travaillent depuis longtemps et Ă  surestimer les avantages de la nouvelle technologie. Pas seulement les programmeurs, tout le monde est soumis Ă  ce biais cognitif.
  • L'effet des caractĂ©ristiques positives - nous avons tendance Ă  voir ce qui est et Ă  perdre de vue ce qui manque. Cela peut conduire au chaos en combinaison avec l'effet de nouveautĂ©, car non seulement vous surestimez la nouvelle technologie, mais vous ignorez Ă©galement ses lacunes .

Une évaluation objective n'est pas facile, mais la compréhension des biais cognitifs de base aidera à prendre des décisions plus rationnelles.

Résumé


Lorsqu'une certaine innovation apparaît, il faut répondre avec soin à deux questions:

  • Cet outil rĂ©sout-il un vrai problème?
  • Comprenons-nous bien les compromis?

Si vous ne pouvez pas répondre en toute confiance à ces deux questions, prenez du recul et réfléchissez.

MongoDB était-il donc généralement le bon choix? Bien sûr, oui; comme pour la plupart des technologies d'ingénierie, cela dépend de nombreux facteurs. Parmi ceux qui ont répondu à ces deux questions, beaucoup ont bénéficié de MongoDB et continuent d'en bénéficier. Quiconque n'a pas fait cela, j'espère qu'ils ont reçu une leçon précieuse et pas trop douloureuse sur le mouvement le long du cycle de battage médiatique.

Clause de non-responsabilité


Je tiens à préciser que je n'ai ni amour ni haine pour MongoDB. C'est juste que nous n'avons eu aucun problème pour lequel MongoDB est le mieux adapté. Je sais que 10gen / MongoDB Inc. Au début, elle a agi avec beaucoup d'audace, en définissant des valeurs par défaut dangereuses et en promouvant MongoDB partout (en particulier sur les hackathons) en tant que solution universelle pour travailler avec toutes les données. C'était probablement une mauvaise décision. Mais cela confirme l'approche décrite ici: ces problèmes pourraient être détectés très rapidement même avec une évaluation superficielle de la technologie.

Source: https://habr.com/ru/post/fr446180/


All Articles