Quand dois-je utiliser une firebase database NoSQL au lieu d’une firebase database relationnelle? Est-il correct d’utiliser les deux sur le même site?

Quels sont les avantages de l’utilisation des bases de données NoSQL? J’ai beaucoup lu à leur sujet ces derniers temps, mais je ne sais toujours pas pourquoi je souhaiterais en mettre en œuvre et dans quelles circonstances je souhaiterais en utiliser un.

Les bases de données relationnelles appliquent ACID . Vous aurez donc des magasins de données orientés transaction basés sur des schémas. Il a fait ses preuves et convient à 99% des applications du monde réel. Vous pouvez pratiquement faire quelque chose avec des bases de données relationnelles.

Cependant, la vitesse et le dimensionnement sont limités en termes de stockage de données à haute disponibilité massive. Par exemple, Google et Amazon ont des téraoctets de données stockés dans de grands centres de données. L’interrogation et l’insertion ne sont pas performantes dans ces scénarios en raison de la nature de blocage / schéma / transaction des RDBM. C’est la raison pour laquelle ils ont implémenté leurs propres bases de données (en fait, des magasins à valeur ajoutée) pour un gain de performance et une évolutivité considérables.

Les bases de données NoSQL existent depuis longtemps – le terme est nouveau. Quelques exemples sont des bases de données de graphes, d’objects, de colonnes, XML et de documents.

Pour votre 2ème question: est-il acceptable d’utiliser les deux sur le même site?

Pourquoi pas? Les deux servent à des fins différentes, non?

Les solutions NoSQL sont généralement conçues pour résoudre un problème pour lequel les bases de données relationnelles ne sont pas bien adaptées, trop coûteuses à utiliser (comme Oracle) ou vous obligent à implémenter quelque chose qui rompt la nature relationnelle de votre firebase database.

Les avantages sont généralement spécifiques à votre utilisation, mais à moins que vous ayez un problème quelconque à modéliser vos données dans un SGBDR, je ne vois aucune raison pour laquelle vous choisiriez NoSQL.

J’utilise moi-même MongoDB et Riak pour des problèmes spécifiques où un SGBDR n’est pas une solution viable, pour toutes les autres choses, j’utilise MySQL (ou SQLite pour les tests).

Si vous avez besoin d’ une firebase database NoSQL que vous connaissez habituellement, les raisons possibles sont les suivantes:

  • le client souhaite une disponibilité de 99,999% sur un site à fort trafic.
  • Vos données n’ont aucun sens en SQL, vous vous retrouvez en train de faire plusieurs requêtes JOIN pour accéder à certaines informations.
  • vous rompez le modèle relationnel, vous avez des objects CLOB qui stockent des données dénormalisées et vous générez des index externes pour rechercher ces données.

Si vous n’avez pas besoin d’une solution NoSQL, gardez à l’esprit que ces solutions ne sont pas destinées à remplacer un SGBDR mais plutôt des alternatives où la première échoue et, plus important encore, qu’elles sont relativement nouvelles en tant que telles. caractéristiques manquantes

Oh, et en ce qui concerne la deuxième question, il est parfaitement correct d’utiliser n’importe quelle technologie en conjonction avec une autre, donc pour être complet, MongoDB et MySQL fonctionnent bien ensemble tant qu’ils ne sont pas sur la même machine.

Martin Fowler a une excellente vidéo qui explique bien les bases de données NoSQL. Le lien va directement à ses raisons de les utiliser, mais la vidéo entière contient de bonnes informations.

  1. Vous avez de grandes quantités de données – en particulier si vous ne pouvez pas tout intégrer sur un serveur physique, car NoSQL a été conçu pour évoluer correctement.

  2. Non concordance impédance object-relation – Vos objects de domaine ne correspondent pas bien à un schéma de firebase database relatif. NoSQL vous permet de conserver vos données sous forme de documents (ou de graphiques) qui peuvent correspondre beaucoup plus étroitement à votre modèle de données.

NoSQL est un système de firebase database où les données sont organisées dans le document (MongoDB), la paire clé-valeur (MemCache, Redis), la structure graphique (Neo4J).

Peut-être y a-t-il des questions possibles et une réponse pour “Quand aller pour NoSQL”:

  1. Exiger un schéma flexible ou gérer des données de type arborescence?
    Généralement, dans le développement agile, nous commençons à concevoir un système sans connaître toutes les exigences en amont, alors que plus tard tout au long du développement, le système de firebase database peut nécessiter des modifications de conception fréquentes, mettant en vedette MVP (Minimal Viable product). Ou vous avez affaire à un schéma de données qui est de nature dynamic. Par exemple, les journaux système, par exemple les journaux AWS cloudwatch.

  2. L’dataset est vaste / grand?
    Oui, la firebase database NoSQL est le meilleur candidat pour les applications où la firebase database doit gérer des millions voire des milliards d’enregistrements sans compromettre les performances.

  3. Compromis entre la mise à l’échelle et la cohérence
    Contrairement à RDMS, la firebase database NoSQL risque de perdre de petites données ici et là (note: la probabilité est de .x%), mais sa facilité de mise à l’échelle en termes de performances. Exemple: Cela peut être utile pour stocker des personnes qui sont en ligne dans une application de messagerie instantanée, des jetons dans la firebase database, des statistiques de trafic sur le site Web.

  4. Effectuer des opérations de géolocalisation: MongoDB prend en charge les opérations de géo-localisation et de géolocalisation. J’ai vraiment aimé cette fonctionnalité de MongoDB.

En bref, MongoDB convient parfaitement aux applications dans lesquelles vous pouvez stocker des données structurées dynamics à grande échelle.

Je suis tombé sur cette question en cherchant des raisons convaincantes de s’écarter de la conception du SGBDR.

Il y a un excellent article de Julian Brown qui met en lumière les contraintes des systèmes dissortingbués. Le concept s’appelle le théorème CAP de Brewer qui résume:

Les trois exigences des systèmes dissortingbués sont: la cohérence, la disponibilité et la tolérance de partitionnement (CAP en bref). Mais vous ne pouvez en avoir que deux à la fois.

Et c’est comme ça que je l’ai résumé pour moi:

Vous feriez mieux de choisir NoSQL si la cohérence est ce que vous sacrifiez.

Certaines informations essentielles manquent pour répondre à la question: Quels sont les cas d’utilisation que la firebase database doit pouvoir couvrir? Des parsings complexes doivent-elles être effectuées à partir de données existantes ( OLAP ) ou l’application doit-elle pouvoir traiter de nombreuses transactions ( OLTP )? Quelle est la structure de données? C’est loin de la fin de la période des questions.

À mon avis, il est faux de prendre des décisions technologiques sur la base de mots à la mode audacieux sans savoir exactement ce qui se cache derrière. NoSQL est souvent félicité pour son évolutivité. Mais vous devez également savoir que la mise à l’échelle horizontale (sur plusieurs nœuds) a également son prix et qu’elle n’est pas gratuite. Ensuite, vous devez gérer des problèmes tels que la cohérence éventuelle et définir comment résoudre les conflits de données s’ils ne peuvent pas être résolus au niveau de la firebase database. Cependant, cela s’applique à tous les systèmes de firebase database dissortingbués.

La joie des développeurs avec le mot “schema less” chez NoSQL est aussi très importante au début. Ce mot à la mode est rapidement désenchanté après l’parsing technique, car il ne nécessite pas de schéma lors de l’écriture, mais intervient lors de la lecture. C’est pourquoi il devrait être correctement “schéma sur lecture”. Il peut être tentant de pouvoir écrire des données à sa discrétion. Mais comment gérer la situation s’il existe des données existantes mais que la nouvelle version de l’application attend un schéma différent?

Le modèle de document (comme dans MongoDB, par exemple) ne convient pas aux modèles de données où il existe de nombreuses relations entre les données. Les jointures doivent être effectuées au niveau de l’application, ce qui représente un effort supplémentaire et pourquoi devrais-je programmer les choses que la firebase database devrait faire?

Si vous faites valoir que Google et Amazon ont développé leurs propres bases de données car les SGBDR classiques ne peuvent plus gérer le flot de données, vous pouvez seulement dire: vous n’êtes pas Google et Amazon. Ces entresockets sont le fer de lance, environ 0,01% des scénarios où les bases de données traditionnelles ne sont plus adaptées, mais pour le rest du monde.

Ce qui n’est pas anodin: SQL existe depuis plus de 40 ans et des millions d’heures de développement ont été consacrées à de grands systèmes tels qu’Oracle ou Microsoft SQL. Cela doit être réalisé par de nouvelles bases de données. Parfois, il est également plus facile de trouver un administrateur SQL que quelqu’un pour MongoDB. Ce qui nous amène à la question de la maintenance et de la gestion. Un sujet qui n’est pas vraiment sexy, mais cela fait partie de la décision technologique.