Avantages / inconvénients des bases de données basées sur des documents par rapport aux bases de données relationnelles

J’ai essayé de voir si je pouvais accomplir certaines exigences avec une firebase database basée sur des documents, en l’occurrence CouchDB. Deux exigences génériques:

  • CRUD d’entités avec quelques champs qui ont un index unique dessus
  • application web de commerce électronique comme eBay ( meilleure description ici ).

Et je commence à penser qu’une firebase database basée sur un document n’est pas le meilleur choix pour répondre à ces exigences. De plus, je ne peux pas imaginer une utilisation d’une firebase database basée sur Document (mon imagination est peut-être trop limitée).

Pouvez-vous m’expliquer si je demande des poires d’un orme lorsque j’essaie d’utiliser une firebase database orientée document pour ces exigences?

Vous devez réfléchir à la manière dont vous abordez l’application de manière orientée vers les documents. Si vous essayez simplement de reproduire la manière dont vous modéliseriez le problème dans un SGBDR, vous échouerez. Il y a aussi différents compromis à faire. ([ed: pas sûr que cela soit lié à l’argument mais:] Rappelez-vous que la conception de CouchDB suppose que vous aurez un cluster actif de plusieurs noeuds qui pourrait échouer à tout moment. Comment votre application va-t-elle gérer l’un des noeuds de firebase database disparaissant? dessous?)

Une façon d’y penser est d’imaginer que vous n’avez pas d’ordinateurs, juste des documents papier. Comment créeriez-vous un processus commercial efficace en utilisant des bouts de papier? Comment pouvez-vous éviter les goulots d’étranglement? Et si quelque chose ne va pas?

Un autre aspect auquel vous devriez penser est la cohérence finale, dans laquelle vous vous retrouverez éventuellement dans un état cohérent, mais vous pourriez être incohérent pendant un certain temps. Ceci est un anathème dans le SGBDR terrestre, mais extrêmement commun dans le monde réel. L’exemple de transaction canonique consiste à transférer de l’argent à partir de comptes bancaires. Comment cela se passe-t-il réellement dans le monde réel – à travers une seule transaction atomique ou à travers différentes banques émettant des avis de crédit et de débit les uns aux autres? Que se passe-t-il lorsque vous écrivez un chèque?

Alors regardons vos exemples:

  • CRUD d’entités avec des champs avec index unique.

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

Nous devons donc examiner le problème du monde réel et voir si nous pouvons le modéliser. Avez-vous vraiment besoin qu’ils soient uniques? Votre application peut-elle gérer plusieurs documents avec la même valeur? Devez-vous atsortingbuer un identifiant unique? Pouvez-vous faire cela de manière déterministe? Un scénario courant où cela est requirejs est celui où vous avez besoin d’un identifiant séquentiel unique. C’est difficile à résoudre dans un environnement répliqué. En fait, si l’identifiant unique doit être ssortingctement séquentiel par rapport au temps créé, c’est impossible si vous avez besoin de l’identifiant immédiatement. Vous devez assouplir au moins une de ces contraintes.

  • application web de commerce électronique comme ebay

Je ne suis pas sûr de savoir quoi append ici car le dernier commentaire que vous avez fait sur ce post était de dire “très utile! Merci”. Y a-t-il quelque chose qui manque dans l’approche décrite qui vous pose toujours problème? Je pensais que la réponse de Mr Kurt était assez complète et j’ai ajouté un petit coup de pouce qui réduirait les conflits.

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

  • Oui: utiliser relationnel
  • Non: utiliser le document.

Je suis dans le même bateau, j’adore couchdb en ce moment et je pense que tout le style fonctionnel est génial. Mais quand exactement nous commençons à les utiliser dans ernest pour les applications. Je veux dire, oui, nous pouvons tous commencer à développer des applications extrêmement rapidement, sans aucune forme, avec tous ces désagréables problèmes de forme normale laissés de côté et sans utiliser de schémas. Mais pour reprendre une phrase “nous sums sur les épaules des géants”. Il y a une bonne raison d’utiliser le SGBDR, de normaliser et d’utiliser des schémas. Mon ancienne tête d’oracle est en train de penser à des données sans forme.

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

Je me suis creusé les méninges le mois dernier en essayant de comprendre les mécanismes de stockage de couchdb, apparemment il utilise des arbres B mais ne stocke pas de données basées sur la forme normale. Est-ce que cela signifie qu’il est vraiment très intelligent et réalise que des bits de données sont répliqués, alors permettez-nous de pointer vers cette entrée d’arbre B?

Jusqu’à présent, je pense aux documents XML, aux fichiers de configuration, aux fichiers de ressources diffusés sur des chaînes de base64.

Mais pourrais-je utiliser couchdb pour les données structurelles. Je ne sais pas, aucune aide grandement appréciée à ce sujet.

Peut-être utile pour stocker des données RDF ou même du texte libre.

Une possibilité consiste à avoir une firebase database relationnelle principale qui stocke les définitions des éléments pouvant être récupérés par leurs identifiants et une firebase database de documents pour les descriptions et / ou les spécifications de ces éléments. Par exemple, vous pouvez avoir une firebase database relationnelle avec une table Products avec les champs suivants:

  • ProductID
  • La description
  • Prix ​​unitaire
  • La taille du lot
  • Caractéristiques

Et ce champ de spécifications contiendrait en réalité une référence à un document avec les spécifications techniques du produit. De cette façon, vous avez le meilleur des deux mondes.

Les bases de données basées sur les documents sont les mieux adaptées au stockage des documents. Lotus Notes est une implémentation commune et le courrier électronique Notes est un exemple. Pour ce que vous décrivez, le commerce électronique, le CRUD, etc., les bases de données réelles sont mieux conçues pour le stockage et la récupération des éléments de données / éléments indexés (par opposition aux documents).

Re CRUD: l’ensemble du paradigme REST est directement lié à CRUD (ou vice versa). Donc, si vous savez que vous pouvez modéliser vos besoins avec des ressources (identifiables via des URI) et un ensemble d’opérations de base (à savoir CRUD), vous êtes peut-être proche d’un système basé sur REST, fourni par de nombreux systèmes orientés document. de la boîte.