71 votes

Avantages/inconvénients de document basé sur les bases de données contre les bases de données relationnelles

J'ai essayé de voir si je peux l'accomplir certaines exigences avec un document de la base de données, dans ce cas, CouchDB. Deux exigences génériques:

  • CRUD des entités avec quelques champs qui ont un index unique sur elle
  • ecommerce web app comme eBay (meilleure description ici).

Et je suis en commençant à penser qu'un Document de la base de données n'est pas le meilleur choix pour répondre à ces exigences. En outre, je ne peux pas imaginer une utilisation d'un Document de la base de données (peut-être que mon imagination est trop limité).

Pouvez-vous m'expliquer si je fais une demande de poires dans un orme lorsque j'essaie d'utiliser un Document de base de données orientée à ces exigences?

35voto

kerrr Points 2015

Vous avez besoin de penser à la façon dont vous vous approchez de l'application dans un document. Si vous essayez simplement de reproduire la façon dont vous permettrait de modéliser le problème dans un SGBDR alors vous allez échouer. Il y a aussi différents arbitrages que vous pourriez faire. (ndlr: vous ne savez pas comment cela est lié à l'argument, mais:] Souvenez-vous que CouchDB conception suppose que vous allez avoir un cluster actif de nombreux nœuds qui peuvent échouer à tout moment. Comment est votre application va gérer l'un de la base de données des nœuds en train de disparaître sous elle?)

Une façon de penser, c'est d'imaginer que vous n'en avons pas les ordinateurs, les documents sur papier. Comment voulez-vous créer une entreprise efficace processus à l'aide de bouts de papier, étant passé autour? Comment pouvez-vous éviter les goulots d'étranglement? Que faire si quelque chose va mal?

Sous un autre angle que vous devriez penser est la cohérence des résultats, où vous pourrez monter dans un état cohérent, mais finalement vous avez peut-être incompatible pour une certaine période de temps. C'est une abomination dans les SGBDR terre, mais très courante dans le monde réel. L'canonique transaction exemple est de transférer de l'argent à partir de comptes bancaires. Comment est-ce réellement se produire dans le monde réel, par le biais d'un seul transactions atomiques ou par le biais de différentes banques d'émission de crédit et de débit, des avis? Ce qui se passe quand vous écrivez un chèque?

Donc, permet de regarder vos exemples:

  • CRUD des entités avec quelques champs avec un index unique sur elle.

Si je comprends bien dans CouchDB termes, vous voulez avoir une collection de documents où certains nommé valeur est garanti d'être unique à travers tous ces documents? Ce cas n'est généralement pas justifiée car les documents peuvent être créés sur les différentes répliques.

Nous avons donc besoin de regarder le monde réel problème et voir si nous pouvons le modèle. Avez-vous vraiment besoin d'eux pour être unique? Votre application peut gérer plusieurs documents avec la même valeur? Avez-vous besoin d'attribuer un identifiant unique? Pouvez-vous le faire de façon déterministe? Un scénario commun, lorsque cela est requis est l'endroit où vous avez besoin d'un séquentiel unique d'identification. C'est difficile à résoudre dans un environnement répliqué. En fait, si l'identifiant unique est nécessaire pour être strictement séquentielle par rapport au temps créé c'est impossible si vous avez besoin de l'id tout de suite. Vous avez besoin de vous détendre au moins une de ces contraintes.

  • ecommerce web app comme ebay

Je ne suis pas sûr de ce qu'il faut ajouter ici que le dernier commentaire que vous avez fait sur ce poste a été de dire "très utile! grâce". Y avait-il quelque chose de manquant dans l'approche décrite là c'est encore vous causer un problème? J'ai pensé MrKurt la réponse a été assez complet et j'ai ajouté un peu de mise en valeur qui permettrait de réduire les conflits.

12voto

dacracot Points 8567

Est-il nécessaire de normaliser les données?

  • Oui: l'Utilisation du relationnel.
  • Non: l'Utilisation du document.

7voto

WeNeedAnswers Points 1836

Je suis dans le même bateau, je suis amoureuse de couchdb pour le moment, et je crois que tout le style fonctionnel est idéal. Mais quand exactement nous de commencer à les utiliser dans ernest pour les applications. Je veux dire, oui, nous pouvons tous commencer à développer des applications extrêmement rapidement, trucs gratuit avec tous ces vilains hang-ups sur la forme normale de l'être de gauche dans le bord de la route et non pas à l'aide de schémas. Mais, pour reprendre l'expression consacrée "nous sommes debout sur les épaules de géants". Il y a une bonne raison pour utiliser SGBDR et de normaliser et d'utiliser des schémas. Mon ancien oracle de la tête est sous le choc de la pensée sur les données sans forme.

Mon principal facteur wow sur couchdb est la réplication de choses et le système de gestion de versions de travail en tandem.

J'ai cassé mon cerveau pour le dernier mois en essayant d'analyser les mécanismes de stockage de couchdb, apparemment il utilise B arbres, mais ne stocke pas de données basée sur une forme normale. Est-ce à dire qu'il est vraiment très intelligent et se rend compte que les bits de données sont répliquées donc permet de faire juste un pointeur vers ce B de l'arbre d'entrée?

Jusqu'à présent, je pense à des documents xml, des fichiers de configuration, fichiers de ressources diffusées en base64 des chaînes de caractères.

Mais aurais-je utiliser couchdb pour les données structurelles. Je ne sais pas, toute aide grandement appréciée.

Il pourrait être utile dans le stockage de données en RDF ou même sous forme de texte.

5voto

Eduardo León Points 5364

Une possibilité est d'avoir un principal relationnel de la base de données qui stocke les définitions des éléments qui peuvent être récupérés par leur Id, et un document de la base de données pour la description et/ou les caractéristiques de ces éléments. Par exemple, vous pourriez avoir une base de données relationnelle avec les Produits de la table avec les champs suivants:

  • ProductID
  • Description
  • Prix unitaire
  • LotSize
  • Spécifications

Et que les Spécifications de terrain serait en fait contenir une référence à un document avec les spécifications techniques du produit. De cette façon, vous avez le meilleur des deux mondes.

3voto

Jim Anderson Points 2702

Document basé DBs sont les mieux adaptées pour le stockage, ainsi, des documents. Lotus Notes est une commune de mise en œuvre et les Notes e-mail est un exemple. Pour ce que vous décrivez, eCommerce, CRUD, etc., realtional DBs sont mieux conçus pour le stockage et la récupération de données d'objets/éléments qui sont indexés (par opposition aux documents).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X