Quand devrais-je utiliser une base de données NoSQL au lieu d'une base de données relationnelle? Est-il acceptable 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 voudrais en implémenter un, et dans quelles circonstances je voudrais en utiliser un.

113
demandé sur Community 2010-09-15 02:14:46

6 réponses

Les bases de données relationnelles appliquent ACID . Ainsi, vous aurez des magasins de données orientés transaction basés sur un schéma. Il a fait ses preuves et convient à 99% des applications du monde réel. Vous pouvez pratiquement faire n'importe quoi avec des bases de données relationnelles.

Mais, il y a des limites sur la vitesse et la mise à l'échelle quand il s'agit de magasins de données à haute disponibilité massives. Par exemple, Google et Amazon ont téraoctets de données stockées dans les 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 du SGBDR. C'est la raison pour laquelle ils ont implémenté leurs propres bases de données (en fait, les magasins de valeur-clé) pour un gain de performance massif et une évolutivité.

Les bases de données NoSQL existent depuis longtemps - juste le terme est nouveau. Quelques exemples sont les bases de données graph, object, column, XML et document.

Pour votre 2ème question: Est-il acceptable d'utiliser à la fois sur le même site?

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

69
répondu RameshVel 2012-02-26 10:38:18

Les solutions NoSQL sont généralement destinées à 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 brise la nature relationnelle de votre base de données de toute façon.

Les avantages sont généralement spécifiques à votre utilisation, mais à moins que vous n'ayez un problème de modélisation de 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 est pas une solution viable, pour toutes les autres choses, J'utilise MySQL (ou SQLite pour les tests).

Si vous avez besoin de une base de données NoSQL que vous connaissez habituellement, les raisons possibles sont:

  • le client veut 99,999% de disponibilité sur une grande le trafic du site.
  • vos données aucun sens en SQL, vous vous trouvez faire plusieurs requêtes de jointure pour accéder à un élément d'information.
  • vous cassez le relationnel modèle, vous avez des CLOBs que le magasin données dénormalisées et vous générer index externes pour rechercher ces données.

Si vous n'avez pas besoin d'une solution NoSQL, gardez à l'esprit que ces solutions n'étaient pas destinées à remplacer un SGBDR mais plutôt à des alternatives où le premier échoue et, plus important encore, qu'elles sont relativement nouvelles en tant que telles, elles ont encore beaucoup de bugs et de fonctionnalités manquantes.

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

65
répondu Asaf 2014-02-21 18:04:11

Martin Fowler a une excellente Vidéo {[2] } qui donne une bonne explication des bases de données NoSQL. Le lien va directement à ses raisons de les utiliser, mais toute la vidéo contient de bonnes informations.

  1. Vous avez de grandes quantités de données - surtout si vous ne pouvez pas tout Adapter sur un serveur physique comme NoSQL a été conçu pour bien évoluer.

  2. Object-relational impedance mismatch - vos objets de domaine ne correspondent pas bien dans un schéma de base de données relaitionnelle. 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.

30
répondu Despertar 2015-08-28 03:08:06

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

Peut-être Voici des questions possibles et la réponse pour "quand aller pour NoSQL":

  1. Exiger un schéma flexible ou traiter avec des données de type arbre?
    Généralement, dans le développement agile, nous commençons à concevoir le système sans connaître toutes les exigences en amont, où plus tard tout au long du système de base de données de développement peut avoir besoin d'accueillir fréquemment changements de conception, mettant en vedette MVP (produit Minimal Viable). Ou vous avez affaire à un schéma de données de nature dynamique. par exemple, les journaux système, un exemple très précis est AWS CloudWatch logs.

  2. L'ensemble de données est vaste / grand?
    Oui La base de données NoSQL est le meilleur candidat pour les applications où la base de données doit gérer des millions, voire des milliards d'enregistrements sans compromettre les performances.

  3. Compromis entre mise à l'échelle sur la cohérence
    Contrairement à RDMS, la base de données NoSQL peut perdre de petites données ici et là (Note: la probabilité est .x%), mais il est facile de l'échelle en termes de performances. Exemple: cela peut être bon pour stocker les personnes qui sont en ligne dans l'application de messagerie instantanée, les jetons dans la base de données, l'enregistrement des statistiques de trafic du site web.

  4. Effectuer Des Opérations De Géolocalisation: MongoDB hash rich support pour effectuer des opérations de géo-recherche et de géolocalisation. J'ai vraiment aimé cette fonctionnalité de MongoDB.

En bref, MongoDB est idéal pour les applications où vous pouvez stocker données structurées dynamiques à grande échelle.

11
répondu Hrishikesh 2015-12-25 03:51:36

Je suis tombé sur cette question en cherchant des motifs convaincants pour s'écarter de la conception du SGBDR.

Il y a un grand post de Julian Brown qui met en lumière les contraintes des systèmes distribués. Le concept est appelé théorème du chapeau de Brewer qui en résumé va:

Les trois exigences des systèmes distribués sont: la cohérence, la disponibilité et la tolérance de Partition (CAP en bref). Mais vous ne pouvez avoir que deux d'entre eux à un moment.

Et ceci est comment je l'ai résumé pour moi-même:

Vous feriez mieux d'aller pour NoSQL si la cohérence est ce que vous sacrifiez.

1
répondu Jermin Bazazian 2015-12-15 14:17:59

Certaines informations essentielles manquent pour répondre à la question: quels cas d'utilisation la base de données doit-elle pouvoir couvrir? Des analyses complexes doivent-elles être effectuées à partir de données existantes (OLAP) ou l'application doit-elle être capable de traiter de nombreuses transactions (OLTP)? Quelle est la structure des données? Qui est loin de la fin de la question du temps.

À 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 eux. NoSQL est souvent loué pour son évolutivité. Mais vous devez également savoir que la mise à l'échelle horizontale (sur plusieurs nœuds) a également son prix et n'est pas gratuite. Ensuite, vous devez traiter des problèmes tels que 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 base de données. Cependant, cela s'applique à tous les systèmes de base de données distribués.

La joie des développeurs avec le mot "schema less" à NoSQL est au début aussi très grande. Ce terme est rapidement désenchanté après l'analyse technique, car il ne nécessite pas correctement un schéma lors de l'écriture, mais entre en jeu lors de la lecture. C'est pourquoi il devrait être correctement "schéma en lecture". Il peut être tentant de pouvoir écrire des données à sa propre discrétion. Mais comment faire face à la situation s'il y a 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) est ne convient pas pour les modèles de données où il existe de nombreuses relations entre les données. Les jointures doivent être faites au niveau de l'application, ce qui est un effort supplémentaire et pourquoi devrais-je programmer les choses que la base de données devrait faire.

Si vous faites l'argument que Google et Amazon ont développé leurs propres bases de données parce que 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 entreprises sont le fer de lance, certains 0,01% des scénarios où les bases de données traditionnelles ne sont plus convenable, mais pour le reste du monde, ils sont.

Ce qui n'est pas insignifiant: 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 exactement sexy, mais qui fait partie de la technologie décision.

0
répondu Stefan Prugg 2018-03-31 17:53:31