web-dev-qa-db-fra.com

Quand utiliser CouchDB sur MongoDB et inversement

Je suis coincé entre ces deux bases de données NoSQL.

Dans mon projet, je créerai une base de données dans une base de données. Par exemple, j'ai besoin d'une solution pour créer des tables dynamiques.

Ainsi, les utilisateurs peuvent créer des tableaux avec des colonnes et des lignes. Je pense que MongoDB ou CouchDB seront bons pour cela, mais je ne sais pas lequel. J'aurai aussi besoin d'une pagination efficace.

604
Luke101

De C, A & P (cohérence, disponibilité et tolérance de partition) lesquels 2 sont les plus importants pour vous? Référence rapide, le Guide visuel sur les systèmes NoSQL

  • MongodB: cohérence et tolérance de partition
  • CouchDB: Disponibilité et tolérance de partition

Un article de blog, Comparaison Cassandra vs MongoDB vs CouchDB vs Redis vs Riak vs HBase vs Membase vs Neo4j a ' Meilleurs scénarios 'comparés pour chaque base de données NoSQL. Citer le lien,

  • MongoDB: Si vous avez besoin de requêtes dynamiques. Si vous préférez définir des index, pas des fonctions de mappage/réduction. Si vous avez besoin de bonnes performances sur une grosse base de données. Si vous vouliez CouchDB, mais que vos données changent trop, remplissant les disques.
  • CouchDB: Pour accumuler et modifier occasionnellement des données sur lesquelles des requêtes prédéfinies doivent être exécutées. Endroits où la gestion des versions est importante.

Un récent (février 2012) et plus comparaison complète par Riyad Kalla,

  • MongoDB: réplication maître-esclave UNIQUEMENT
  • CouchDB: réplication maître à maître

Un article de blog (octobre 2011) de quelqu'un qui a essayé les deux, n gars de MongoDB apprend CouchDB a commenté que la pagination de CouchDB n'était pas comme utile.

A daté (juin 2009) repère par Kristina Chodorow ( fait partie de l'équipe derrière MongoDB ),

J'irais pour MongoDB.

J'espère que ça aide.

504
user799188

Les réponses surtout compliquent l’histoire.

  1. Si vous prévoyez d'avoir un composant mobile ou si vous avez besoin que les utilisateurs de postes de travail travaillent hors ligne, puis synchronisez leur travail sur un serveur, vous avez besoin de CouchDB.
  2. Si votre code ne fonctionnera que sur le serveur, utilisez MongoDB

C'est tout. À moins que vous n'ayez besoin de la capacité (géniale) de CouchDB pour se répliquer sur des appareils mobiles et de bureau, MongoDB présente l'avantage de la performance, de la communauté et des outils.

198
Ewan Makepeace

Très vieille question mais elle est au-dessus de Google et je n'aime pas trop les réponses que je vois, alors voici la mienne.

Couchdb ne se limite pas à la capacité de développer CouchApps. La plupart des gens utilisent CouchDb dans une architecture Web classique à trois niveaux.

Dans la pratique, pour la plupart des gens, le facteur décisif sera le fait que MongoDb autorise les requêtes ad-hoc avec une syntaxe similaire à celle du code SQL, contrairement à CouchDb (vous devez créer des vues de carte/réduction qui détourne certaines personnes même en créant ces vues. Rapid Application Development convivial - ils n’ont rien à voir avec les procédures stockées).

Pour répondre aux points soulevés dans la réponse acceptée: CouchDb dispose d’un excellent système de routage, mais cela ne signifie pas pour autant qu’il convient uniquement (ou davantage) aux endroits où le routage est important. De plus, couchdb est compatible avec les écritures lourdes grâce à sa nature qui ne comprend que des ajouts (les opérations d'écriture retournent en un rien de temps tout en garantissant qu'aucune donnée ne sera jamais perdue).

Une chose très importante que personne n’a mentionnée est le fait que CouchDb repose sur des index b-tree. Cela signifie que, que vous ayez 1 "ligne" ou 20 milliards, le temps d'interrogation restera toujours inférieur à 10 ms. C'est un changeur de jeu qui fait de CouchDb une base de données à faible temps de latence et facile à lire, et cela ne devrait vraiment pas être négligé.

Pour être juste et exhaustif, l'avantage de MongoDb sur CouchDb est l'outillage et le marketing. Ils disposent d'outils citoyens de premier ordre pour les principales langues et plates-formes facilitant l'intégration, ce qui, ajouté à leur interrogation ad hoc, facilite encore la transition depuis SQL.

CouchDb ne dispose pas de ce niveau d’outillage (bien qu’il existe de nombreuses bibliothèques disponibles à ce jour), mais CouchDb est présenté en tant qu’API HTTP et il est donc assez facile de créer un wrapper dans votre langue préférée pour parler avec elle. Personnellement, j’aime cette approche car elle évite les ballonnements et vous permet de ne prendre que ce que vous voulez (principe de ségrégation d’interface).

Je dirais donc que l’utilisation de l’un ou de l’autre est en grande partie une question de confort et de préférence avec leurs paradigmes. L'approche CouchDb "convient", pour certaines personnes, mais si après avoir appris les fonctionnalités de la base de données (dans l'exhaustif guide officiel ) vous n'avez pas votre moment "enfer ouais", vous devriez probablement passer à autre chose .

Je déconseillerais d'utiliser CouchDb si vous voulez simplement utiliser "le bon outil pour le bon travail". parce que vous découvrirez que vous ne pouvez pas simplement l'utiliser de cette façon et que vous finirez par être énervé et à écrire des articles de blog tels que "Où se trouvent les jointures dans CouchDb?" et "Où est la gestion des transactions?". En effet, Couchdb est - paradoxalement - très transparent, mais requiert en même temps un changement de paradigme et un changement dans la manière dont vous abordez les problèmes pour vraiment briller (et vraiment travailler).

Mais une fois que vous avez fait cela, cela en vaut vraiment la peine. Personnellement, j’aurais besoin de raisons très fortes ou d’un facteur déterminant pour un projet afin de choisir une autre base de données, mais jusqu’à présent, je n’en ai rencontré aucune.

51
tobiak777

Poser cette question vous-même? Et vous déciderez de votre choix de base de données.

  1. Avez-vous besoin de master-master ? Puis CouchDB. CouchDB prend principalement en charge la réplication maître-maître, ce qui permet de prévoir que les nœuds seront déconnectés pendant de longues périodes. MongoDB ne ferait pas bien dans cet environnement.
  2. Avez-vous besoin du débit MAXIMUM R/W ? Alors MongoDB
  3. Avez-vous besoin de la durabilité ultime d'un serveur unique , car vous n'allez avoir qu'un seul serveur de base de données? Puis CouchDB.
  4. Stockez-vous un ensemble de données MASSIVE qui nécessite un éclatement tout en maintenant un débit insensé? Puis MongoDB.
  5. Avez-vous besoin d'une forte cohérence de données? Puis MongoDB.
  6. Avez-vous besoin d'une grande base de données ? Puis CouchDB.
  7. Espérez-vous plusieurs bases de données et plusieurs tables/collections? Alors MongoDB
  8. Vous avez un utilisateur hors ligne de l'application mobile et souhaitez synchroniser ses données d'activité sur un serveur? Ensuite, vous avez besoin de CouchDB.
  9. Avez-vous besoin d’une grande variété de moteurs de recherche ? Alors MongoDB
  10. Avez-vous besoin d'une grande communauté pour utiliser DB? Alors MongoDB
31
Somnath Muluk

Je résume les réponses trouvées dans cet article:

http://www.quora.com/How-does-MongoDB-compare-to-CouchDB-What-are-the-advantages-and-disadvantages-of-each-

MongoDB: Meilleure interrogation, stockage des données dans BSON (accès plus rapide), meilleure cohérence des données, collectes multiples

CouchDB: Meilleure réplication, avec réplication de maître à maître et résolution de conflit, stockage de données au format JSON (lisible par l'homme, meilleur accès via les services REST), interrogation via map-reduction.

En conclusion, MongoDB est plus rapide, CouchDB est plus sûr.

Aussi: http://nosql.mypopescu.com/post/298557551/couchdb-vs-mongodb

24
Alexis Dufrenoy

Tenez compte d'un problème lié aux index uniques rares dans MongoDB. Je l'ai frappé et la solution de contournement est extrêmement lourde.

Le problème est le suivant: vous avez un champ unique, le cas échéant, et vous souhaitez rechercher tous les objets où le champ est absent. La manière dont les index uniques fragmentés sont implémentés dans Mongo est que les objets pour lesquels ce champ est manquant ne sont pas du tout dans l'index - ils ne peuvent pas être récupérés par une requête sur ce champ - {$exists: false} ne fonctionne tout simplement pas.

La seule solution que j'ai trouvée est d'avoir une famille de valeurs null spéciale, où une valeur vide est traduite en un préfixe spécial (comme null:) concaténé en uuid. C'est un vrai casse-tête, car il faut prendre soin de transformer en/à partir des valeurs vides lors de l'écriture/interrogation/lecture. Une nuisance majeure.

Je n'ai jamais utilisé l'exécution javascript côté serveur dans MongoDB (ce n'est pas conseillé de toute façon) et leur carte/réduction offre des performances épouvantables lorsqu'il n'y a qu'un seul nœud Mongo. Pour toutes ces raisons, j’envisage maintenant de consulter CouchDB. Cela convient peut-être davantage à mon scénario particulier.

BTW, si quelqu'un connaît le lien vers le numéro respectif de Mongo décrivant le problème d'index unique rare - veuillez le partager.

20
mark

Je suis sûr que vous pouvez avec Mongo (plus familier avec cela), et à peu près sûr que vous pouvez avec canapé aussi.

Les deux étant orientés documentés (basés sur JSON), il n'y aurait pas de "colonnes" mais plutôt de champs dans les documents - mais ils peuvent être entièrement dynamiques.

Ils le font tous les deux. Vous voudrez peut-être examiner d'autres facteurs à utiliser: autres caractéristiques qui vous tiennent à cœur, la popularité, etc. D'après Google, les offres d'emploi en ligne.com seraient un moyen de considérer la popularité.

Vous pouvez juste l'essayer, je pense que vous devriez pouvoir faire fonctionner Mongo en 5 minutes.

4
dm.