65 votes

Quand utiliser CouchDB vs SGBDR

Je suis à la recherche à CouchDB, qui a un certain nombre de caractéristiques intéressantes sur les bases de données relationnelles, y compris:

  • intuitive REST/HTTP interface
  • facile de réplication
  • les données stockées dans des documents, plutôt que de normaliser les tables

J'apprécie que ce n'est pas un produit à maturité devrait donc être adopté avec prudence, mais je me demande si c'en est vraiment une solution de remplacement viable pour un SGBDR (en dépit de la page d'intro disent le contraire - http://couchdb.apache.org/docs/intro.html).

  1. Dans quelles circonstances pourrait-CouchDB être un meilleur choix de la base de données qu'un SGBDR (par exemple MySQL), par exemple en termes d'évolutivité, de la conception + temps de développement, de fiabilité et de maintenance.
  2. Il y a encore des cas où un SGBDR est encore clairement le bon choix?
  3. Est-ce une question de choix ou choix, ou est une solution hybride plus de chances d'émerger en tant que meilleure pratique?

48voto

Andrew Whitehouse Points 1353

J'ai récemment assisté à la NoSQL conférence à Londres et je pense avoir une meilleure idée maintenant comment répondre à la question d'origine. J'ai aussi écrit un billet de blog, et il ya une couple d'autres bonnes celles.

Points clés:

  • Nous avons accumulé probablement 30 années de connaissances de adminstering bases de données relationnelles, et donc ne devrait pas remplacer sans un examen attentif; données non relationnelles magasins sont moins matures que relationnel, et sont donc intrinsèquement plus risqué d'adopter
  • Il existe différents types de données non relationnelles magasin; certains sont la clé-valeur des magasins, certains sont document magasins, certains sont graphique de bases de données
  • Vous pouvez utiliser une approche hybride, par exemple, une combinaison de SGBDR et graphique banque de données pour un logiciel social site
  • Document de magasins de données (par exemple, CouchDB et MongoDB) sont probablement les plus proches de bases de données relationnelles et de fournir une structure de données JSON avec tous les champs présentés de façon hiérarchique qui évite d'avoir à faire des jointures de tables et de (certains diront) est une amélioration de la traditionnelle mapping objet-relationnel que la plupart des applications en cours d'utilisation
  • Bases de données Non relationnelles en charge la réplication (y compris les master-master); bases de données relationnelles en charge la réplication trop mais peut-être pas aussi complet que le non-relationnelles option
  • De très gros sites tels que Twitter, Digg et Facebook utilisent Cassandra, qui est construit à partir du sol en place pour favoriser le regroupement
  • Bases de données relationnelles sont probablement adapté pour 90% des cas

En résumé, le consensus semble être "agir avec prudence".

26voto

Zed Points 27408

Jusqu'à ce que quelqu'un donne un plus en profondeur de la réponse, ici, sont quelques-uns des avantages et des inconvénients pour CouchDB

Pour:

  • vous n'avez pas besoin pour s'adapter à vos données dans un de ces satanés ordre supérieur formes normales
  • vous pouvez changer le "schéma" de vos données à tout moment
  • vos données seront indexés exactement à vos requêtes, de sorte que vous obtiendrez des résultats en temps constant.

Inconvénients:

  • vous avez besoin de créer des vues pour chaque requête, c'est à dire ad-hoc comme les requêtes (comme la concaténation dynamique OÙ la et de les TRIER dans un SQL) les requêtes ne sont pas disponibles.
  • soit vous avez des données redondantes, ou vous finirez par la mise en œuvre de la rejoindre et de la logique de tri vous-même sur le "client-side" (par exemple, le tri des plusieurs-à-plusieurs relations sur plusieurs champs)

Les Pros ou les Inconvénients:

  • la création de vos points de vue ne sont pas aussi simple que dans le SQL, c'est plus comme un puzzle. Dépend de votre type si c'est un pro ou un con :)

13voto

Javier Points 33134

CouchDB est l'un de plusieurs " clé/valeur des magasins, d'autres incluent les vieux briscards comme BDB, orientée web, comme de Persévérer, MongoDB et CouchDB, les nouveaux super-rapide comme memcached (RAM) et de Tokyo Cabinet, et d'énormes magasins comme Hadoop et BigTable de Google (MongoDB affirme également être sur cet espace).

Il y a certainement d'espace pour les deux clé/valeur de magasins et relationnelles DBs. Traditionnellement, la plupart des Rbds sont considérés comme une couche au-dessus de clé/valeur. Par exemple, MySQL pour utiliser le BDB comme une option de backend pour les tables. En bref, les clés/valeurs ne sais rien sur les champs et les relations, qui sont les fondements de SQL.

Clé/valeur, les magasins sont généralement plus faciles à grande échelle, ce qui en fait un choix attrayant lors de la croissance explosive, à l'instar de Twitter a fait. Bien sûr, cela signifie que toutes les relations entre les valeurs enregistrées ont à être géré à partir de votre code, au lieu de simplement déclaré dans SQL. CouchDB de l'approche est de stocker de grands "documents" dans la valeur de la partie, faisant d'elles (la plupart) autonome, de sorte que vous pouvez obtenir la plupart des données nécessaires dans une seule requête. De nombreux cas d'utilisation ajustement sur cette idée, d'autres ne le font pas.

Le thème actuel je vois, c'est que, après les "Rails n'est pas à l'échelle!!" faire peur, maintenant, beaucoup de gens se rendent compte que ce n'est pas votre web-cadre; mais intelligente de cacher, pour éviter de heurter la base de données, et même de la webapp lorsque cela est possible. L'étoile montante il est memcached.

Comme toujours, tout dépend de vos besoins.

7voto

Jeremy Wall Points 10643

C'est une question difficile à répondre. Je vais donc essayer de mettre en évidence les zones où CouchDB peut fonctionner contre vous.

Les deux plus grandes sources de difficulté sur le Canapé, les Utilisateurs et les Dev listes de diffusion que les gens ont sont:

  • Des Jointures complexes de Données.
  • Multi-Étape Map/Reduce.

Canapé points de Vue sont à peu près les îles d'eux-mêmes. Si vous avez besoin de regroupement ou de fusion/de croiser un ensemble de points de vue que vous devez le faire dans l'application de la couche pour l'instant. Il y a quelques trucs que vous pouvez faire avec vue sur le classement et le complexe clés pour aider avec des jointures, mais ces seulement aller si loin pour certains types de données. Cela peut ou peut ne pas être viable pour des applications différentes. Cela étant dit plusieurs fois, ce problème peut être réduite ou éliminée par la structuration de vos données différemment.

Les commentaires des autres gens sur cette question, qui illustrent les différents types de données qui sont bien adaptés à CouchDB.

Une autre chose à garder à l'esprit est que beaucoup de fois les données que vous pourriez avoir besoin de combiner/fusionner/croisent serait de données que vous le feriez en mode hors connexion dans une base de données SGBDR de toute façon, de sorte que vous pourriez ne perdez rien en faire de même dans CouchDB.

Réponse courte: je pense que finalement CouchDB sera en mesure de traiter tout type de problème que vous voulez jeter. Mais le niveau de confort que vous avez l'aide qu'il peut différer de développeur de développeur de. C'est un peu subjectif, je pense. Il m'arrive d'utiliser une turing langage de requête de mes données et de garder plus de logique dans la couche application. Votre kilométrage peut varier.

3voto

Filippo Points 31

Sam, vous avez à prendre une autre approche avec CouchDB et, en général, avec un plan ou de document de la base de données. Vous ne pouvez pas définir une contrainte, un tel unique, mais vous pouvez faire une requête de données pour vérifier si cet e-mail est utilisée et si cette connexion est utilisée. C'est la bonne approche, vous avez à changer votre esprit.

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