NoSQL - MongoDB vs CouchDB [fermé]

154

Je suis un noob complet en ce qui concerne le mouvement NoSQL. J'ai beaucoup entendu parler de MongoDB et de CouchDB. Je sais qu'il y a des différences entre les deux. Lesquels recommandez-vous d'apprendre comme première étape dans le monde NoSQL?

mpenrow
la source
Dans un premier temps, mongoDB est meilleur car il est plus facile à apprendre mais il a quelques problèmes. Il n'y a pas de meilleur choix pour utiliser une base de données noSQL spécifique, cela dépend de ce que vous devez faire. Découvrez orienté document, valeur-clé, orienté graphique, orienté colonne.
Chris

Réponses:

149

Voir les liens suivants

Mise à jour : J'ai trouvé une excellente comparaison des bases de données NoSQL .

MongoDB (3,2)

  • Écrit en: C ++
  • Point principal: magasin de documents JSON
  • Licence: AGPL (Pilotes: Apache)
  • Protocole: personnalisé, binaire (BSON)
  • Réplication maître / esclave (basculement automatique avec jeux de réplicas)
  • Sharding intégré
  • Les requêtes sont des expressions javascript
  • Exécuter des fonctions javascript arbitraires côté serveur
  • Possède une indexation et des requêtes géospatiales
  • Plusieurs moteurs de stockage avec des caractéristiques de performance différentes
  • Les performances par rapport aux fonctionnalités
  • Validation des documents
  • Journalisation
  • Cadre d'agrégation puissant
  • Sur les systèmes 32 bits, limité à ~ 2,5 Go
  • Recherche textuelle intégrée
  • GridFS pour stocker des données volumineuses + des métadonnées (pas réellement un FS)
  • Conscient du centre de données

Utilisation optimale : 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.

Par exemple : pour la plupart des choses que vous feriez avec MySQL ou PostgreSQL, mais avoir des colonnes prédéfinies vous retient vraiment.

CouchDB (1,2)

  • Écrit en: Erlang
  • Point principal: cohérence DB, facilité d'utilisation
  • Licence: Apache
  • Protocole: HTTP / REST
  • Réplication bidirectionnelle (!),
  • continue ou ad hoc,
  • avec détection de conflit,
  • ainsi, réplication maître-maître. (!)
  • MVCC - les opérations d'écriture ne bloquent pas les lectures
  • Les versions précédentes des documents sont disponibles
  • Conception (fiable) en cas d'accident uniquement
  • Besoin de compactage de temps en temps
  • Vues: carte intégrée / réduire
  • Mise en forme des vues: listes et émissions
  • Validation des documents côté serveur possible
  • Authentification possible
  • Mises à jour en temps réel via '_changes' (!)
  • Manipulation des pièces jointes

Meilleure utilisation : pour accumuler, 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.

Par exemple : CRM, systèmes CMS. La réplication maître-maître est une fonctionnalité particulièrement intéressante, permettant des déploiements multi-sites faciles.

amra
la source
1
Pour toute personne concernée par le fait que la licence serveur de MongoDB est AGPL, jeter un coup d'œil à la politique de licence de mongodb peut apporter un certain soulagement.
Patrick
@amra Donc, vous voulez dire que si je sauvegarde les données et que je les lis uniquement, utiliser couchdb est le meilleur choix?
verystrongjoe
@verystrongjoe Cela dépend de la complexité des données et des requêtes. Vous ne pouvez généralement pas dire lequel est le meilleur.
amra
@amra Ok. Mais .. Si ça va accumuler des données et sélectionner les données et que je dois choisir entre mongo et canapé, lequel est le meilleur?
verystrongjoe
Les CouchApps ne sont "plus recommandés" depuis ~ 2012: docs.couchdb.com/en/latest/ddocs
Tim Sylvester
123

Si vous venez du monde MySQL, MongoDB vous "semblera" beaucoup plus naturel à cause de son support de langage de type requête.

Je pense que c'est ce qui le rend si convivial pour beaucoup de gens.

CouchDB est fantastique si vous souhaitez utiliser le très bon support de réplication maître-maître avec une configuration multi-nœuds, éventuellement dans différents centres de données ou quelque chose du genre.

La réplication de MongoDB (jeux de répliques) est une configuration maître-esclave-esclave-esclave- *, vous ne pouvez écrire que sur le maître dans un jeu de répliques et lire à partir de l'un d'entre eux.

Pour une configuration de site standard, c'est très bien. Il correspond très bien à l'utilisation de MySQL.

Mais si vous essayez de créer un service global comme un CDN qui doit garder tous les nœuds globaux synchronisés même en lecture / écriture sur tous, quelque chose comme la réplication dans CouchDB va être un énorme avantage pour vous.

Alors que MongoDB a un langage de type requête que vous pouvez utiliser et que vous vous sentez très intuitif, CouchDB adopte une approche de «réduction de carte» et ce concept de vues. Cela semble étrange au début, mais au fur et à mesure que vous comprenez cela, cela commence vraiment à être intuitif.

Voici un bref aperçu donc cela a du sens:

  • CouchDB stocke toutes vos données dans un b-tree
  • Vous ne pouvez pas "interroger" dynamiquement avec quelque chose comme "SELECT * FROM utilisateur WHERE ..."
  • Au lieu de cela, vous définissez des «vues» discrètes de vos données ... «voici une vue de tous mes utilisateurs», «voici une vue de tous les utilisateurs de plus de 10 ans» «voici une vue de tous les utilisateurs de plus de 30 ans» et bientôt.
  • Ces vues sont définies à l'aide d'une approche de réduction de carte et sont définies comme des fonctions JavaScript.
  • Lorsque vous définissez une vue, la base de données commence à alimenter tous les documents de la base de données à laquelle vous avez affecté la vue, à travers elle et à enregistrer les résultats de vos fonctions comme "index" sur ces données.
  • Il y a quelques requêtes de base que vous pouvez faire sur les vues, comme demander une clé (ID) ou une plage d'ID spécifiques, indépendamment de ce que fait votre fonction de mappage / réduction.
  • Lisez ces diapositives , c'est la meilleure clarification de la carte / réduction dans Couch que j'ai vue.

Donc, ces deux sources utilisent des documents JSON, mais CouchDB suit cette approche davantage «chaque serveur est un maître et peut se synchroniser avec le monde», ce qui est fantastique si vous en avez besoin, tandis que MongoDB est vraiment le MySQL du monde NoSQL.

Donc, si cela ressemble plus à ce dont vous avez besoin / voulez, allez-y.

Les petites différences comme le protocole binaire de Mongo par rapport à l'interface RESTful de CouchDB sont tous des détails mineurs.

Si vous voulez une vitesse brute et au diable la sécurité des données, vous pouvez faire fonctionner Mongo plus rapidement que CouchDB car vous pouvez lui dire de fonctionner à court de mémoire et de ne pas valider les choses sur le disque, sauf pour des intervalles clairsemés.

Vous pouvez faire la même chose avec Couch, mais son protocole de communication basé sur HTTP va être 2 à 4 fois plus lent que la communication binaire brute avec Mongo dans cette "vitesse sur tout!" scénario.

Gardez à l'esprit que la vitesse folle brute est inutile si un crash de serveur ou une panne de disque corrompt et détruit votre base de données dans l'oubli, de sorte que le point de données n'est pas aussi étonnant que cela puisse paraître (à moins que vous ne fassiez des systèmes de trading en temps réel sur le mur. Street, auquel cas regardez Redis).

J'espère que tout aide!

Riyad Kalla
la source
"MongoDB est vraiment le MySQL du monde NoSQL" - Je ne sais pas si les choses ont changé mais cet article de 2014 n'est pas d'accord: sarahmei.com/blog/2013/11/11/why-you-should-never-use- mongodb
Onur Yıldırım
Bien que, vaguement dans l'esprit, je pense que le commentaire fonctionne toujours, vous avez raison, BEAUCOUP a changé au cours de la dernière demi-décennie et mon commentaire devrait être facilement rejeté.
Riyad Kalla
1

Il y a maintenant beaucoup plus de bases de données NoSQL sur le marché que jamais auparavant. Je suggère même de jeter un œil au Magic Quadrant de Gartner si vous recherchez une base de données qui sera également idéale pour les applications d'entreprise basées sur le support, l'évolutivité, la gestion et le coût.

http://www.gartner.com/technology/reprints.do?id=1-23A415Q&ct=141020&st=sb

Je voudrais suggérer Couchbase à tous ceux qui ne l'ont pas encore essayé, mais pas sur la base de la version indiquée dans le rapport (2.5.1) car il y a près de 2 révisions derrière CB Server aujourd'hui, proche de la sortie de 4.0 en 2H15 .

http://www.couchbase.com/coming-in-couchbase-server-4-0

L'autre aspect de Couchbase en tant que fournisseur / produit est qu'il s'agit d'un type de base de données multi-usage. Il peut agir comme un pur magasin K / V, une base de données orientée document avec mise à l'échelle multidimensionnelle, Memcached, mise en cache avec persistance, et prend en charge SQL conforme ANSI 92 avec jointures automatiques, réplication vers des clusters DR en appuyant sur un bouton, et a même un composant mobile intégré à l'écosystème.

Si rien d'autre, cela vaut la peine de consulter les derniers benchmarks:

http://info.couchbase.com/Benchmark_MongoDB_VS_CouchbaseServer_HPW_BM.html http://info.couchbase.com/NoSQL-Technical-Comparison-Report.html

Austin Gonyou
la source