155 votes

NoSQL - MongoDB vs CouchDB

Je suis un noob complet en ce qui concerne le mouvement NoSQL. J’ai entendu beaucoup parler MongoDB et CouchDB. Je sais il y a des différences entre les deux. Qui me conseillez-vous d’apprentissage dans un premier temps dans le monde NoSQL ?

150voto

amra Points 4967

Voir les liens suivants

Mise à jour: j'ai trouvé de grands comparaison de NoSQL bases de données.

MongoDB

  • Écrit dans: C++
  • Point principal: Conserve certaines propriétés amicale de SQL. (Requête, index)
  • Licence: licence AGPL (Pilotes: Apache)
  • Protocole: Personnalisé, binaire (BFILS)
  • Réplication maître/esclave (basculement automatique avec les jeux de réplicas)
  • La fragmentation intégré
  • Les requêtes sont des expressions javascript
  • D'exécuter des fonctions javascript côté serveur
  • Meilleure mise-en-place de CouchDB
  • Utilise les fichiers mappés en mémoire pour le stockage de données
  • Les performances de plus de fonctionnalités
  • La journalisation (avec --journal) est activée
  • Sur les systèmes 32 bits, limité à ~2.5 Go
  • Une base de données vide prend avec 192mo
  • GridFS pour stocker des données big data + métadonnées (pas vraiment une FS)
  • A géospatiales de l'indexation

Meilleur utilisé: Si vous avez besoin de requêtes dynamiques. Si vous préférez définir les index, pas de map/reduce fonctions. Si vous avez besoin de bonnes performances sur un grand DB. Si vous voulais CouchDB, mais vos données change trop, remplissage disques.

Par exemple: Pour la plupart des choses que vous feriez avec MySQL ou PostgreSQL, mais ayant prédéfinis colonnes vraiment vous retient.

CouchDB (V1.1.1)

  • Écrit dans: Erlang
  • Point principal: DB la cohérence, la simplicité d'utilisation
  • Licence: Apache
  • Protocole: HTTP/REST
  • Bi-directionnel (!) la réplication,
  • continu ou ad-hoc,
  • avec la détection de conflit,
  • ainsi, maître-maître de réplication. (!)
  • MVCC - les opérations d'écriture ne bloquent pas le lit
  • Les versions précédentes des documents sont disponibles
  • Crash (fiable) de conception
  • Besoins de compactage, de temps à autre
  • Vues: embedded map/reduce
  • Le formatage de vues: listes et des spectacles
  • Côté serveur, le document de validation possible
  • L'authentification possible
  • En temps réel les mises à jour via _changes (!)
  • Gestion des pièces jointes
  • ainsi, CouchApps (autonome js apps)
  • bibliothèque jQuery inclus

Meilleur utilisé: Pour l'accumulation, à l'occasion de la modification des données, d'une pré-définis sont les requêtes à exécuter. Des lieux où le contrôle de version est important.

Par exemple: CRM, systèmes CMS. Maître-maître de réplication est une fonctionnalité intéressante, permettant des configurations multi-site déploiements.

123voto

Riyad Kalla Points 6064

Si vous venez à partir de la base de données MySQL monde, MongoDB va "sentir" beaucoup plus naturel pour vous en raison de sa requête comme support de la langue.

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

CouchDB est fantastique si vous voulez utiliser le vraiment grand maître-maître de réplication de soutien avec un multi-configuration de nœud, peut-être dans les différents centres de données ou quelque chose comme ça.

MongoDB est replication (réplication) est un maître-esclave-esclave-esclave-* le programme d'installation, vous ne pouvez écrire au maître dans un jeu de réplicas et de les lire sur l'un d'eux.

Pour un site standard de configuration, c'est très bien. Elle correspond à l'utilisation du MySQL vraiment bien.

Mais si vous essayez de créer un service global comme un CDN qui a besoin de garder globale de tous les nœuds synchronisés, même si en lecture/écriture à tous d'entre eux, quelque chose comme la réplication de CouchDB va être un énorme avantage pour vous.

Alors que MongoDB est une requête comme les langues que vous pouvez utiliser et se sent très intuitive, CouchDB prend un "map-reduce" approche des concepts de points de vue. Ça fait bizarre au début, mais que vous obtenez le coup de lui, il commence vraiment le sentiment intuitif.

Voici un rapide aperçu alors, c'est un peu logique:

  • CouchDB stocke toutes vos données dans un b-arbre
  • Vous ne pouvez pas "requête" de façon dynamique avec quelque chose comme "SELECT * from utilisateur WHERE..."
  • Au lieu de cela, vous définissez discret "points de vue" de vos données... "voici une vue de l'ensemble de mes utilisateurs", "ici est une vue de tous les utilisateurs âgés de plus de 10" ", voici une vue de tous les utilisateurs âgés de plus de 30" et ainsi de suite.
  • Ces vues sont définies à l'aide de la carte-réduire approche, et sont définis comme des fonctions JavaScript.
  • Lorsque vous définissez un point de vue, la DB commence à se nourrir de tous les documents de la DB que vous avez attribué à la vue, à travers elle et d'enregistrer les résultats de vos fonctions comme l ' "indice" sur ces données.
  • Il y a quelques requêtes de base que vous pouvez faire sur les points de vue comme demander à une clé spécifique (ID) ou de la plage d'Id indépendamment de ce que votre map/reduce fonction n'.
  • Lire au travers de ces lames, c'est la meilleure clarification de map/reduce dans le Canapé que j'ai vu.

Afin que ces deux sources d'utiliser JSON documents, mais CouchDB suit ce plus "chaque serveur est un maître et peut se synchroniser avec le monde" approche de ce qui est fantastique si vous avez besoin d'elle, tandis que MongoDB est vraiment le MySQL du monde NoSQL.

Donc si cela sonne plus comme ce que vous avez besoin/envie, aller.

Peu de différences comme Mongo du protocole binaire vs l'interface RESTful de CouchDB sont tous les petits détails.

Si vous souhaitez vitesse brute et de l'enfer avec la sécurité des données, vous pouvez faire Mongo courir plus vite que CouchDB comme vous pouvez le dire à opérer à partir de la mémoire et de ne pas commettre de choses sur le disque, sauf pour éparses intervalles.

Vous pouvez faire de même avec Canapé, mais il est basé sur HTTP protocole de communication va être 2-4x plus lente que binaires brutes de communication avec Mongo dans cette "vitesse au-dessus de tout!" scénario.

Gardez à l'esprit que les premières fou fou de vitesse est inutile si une panne de serveur ou de défaillance du disque corrompt et des toasts de votre base de données dans l'oubli, de sorte que le point de données n'est pas aussi incroyable que cela puisse paraître (sauf si vous êtes en temps réel des systèmes de négociation sur Wall Street, dans ce cas regarder le Redis).

Espérons que tous permet de!

5voto

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