MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

La bataille des bases de données NoSQL - Comparaison de MongoDB et CouchDB

MongoDB et CouchDB sont tous deux des types de bases de données NoSQL basées sur des documents. Une base de données de documents est également appelée magasin mdocument, et ils sont généralement utilisés pour stocker le format de document des données semi-structurées et leur description détaillée. Il permet la création et la mise à jour de programmes sans avoir besoin de se référer au schéma maître. La gestion de contenu et le traitement des données dans l'application mobile sont deux des domaines où le magasin de documents peut être appliqué.

Présentation de MongoDB

MongoDB était la startup de 10gen, qui a vu le jour en 2007. Issu de la famille des magasins de documents, il s'agit de l'une des bases de données NoSQL typiques, sans schéma, avec des performances, une évolutivité et une richesse relativement élevées. dans les fonctions de traitement des données. Cette base de données open source est écrite en C++ et utilise des schémas dynamiques. L'architecture de MongoDB contient des documents regroupés en collections en fonction de leur structure. Cette base de données utilise BSON. BSON est la représentation binaire de JSON et prend en charge le stockage de documents et l'échange de données. Dans MongoDB, les sujets métier peuvent être stockés dans un nombre minimum de documents, qui peuvent être indexés principalement ou secondairement, sans les décomposer en plusieurs documents relationnels.

En plus des capacités mentionnées ci-dessus de MongoDB, il fournit également une grande collection d'ensembles de répliques où chaque ensemble peut contenir plus d'une copie de données. Dans les ensembles de répliques, toutes les fonctions primaires (lecture et écriture) sont exécutées sur l'ensemble primaire tandis que les ensembles secondaires sont utilisés en cas de défaillance du premier. MongoDB intègre le sharding, qui utilise le processus de mise à l'échelle horizontalement. La propriété d'équilibrage de charge de cette base de données de stockage de documents se justifie par le fait qu'elle s'exécute sur plusieurs serveurs, assurant ainsi la duplication des données et l'équilibrage de la charge. En retour, il fournit également une sauvegarde lors de la panne matérielle. Il utilise également un système de fichiers en grille qui divise le fichier particulier en différentes parties et les stocke séparément.

Les fonctionnalités communes de MongoDB :

  • La conception du modèle de données réduit le besoin de jointures et permet une évolution facile du schéma.
  • Hautes performances, car il ne contient ni jointure ni transactions qui permettent un accès rapide et donc des performances accrues.
  • Haute disponibilité grâce à l'incorporation d'ensembles de réplicas capables de fournir une sauvegarde en cas de panne et également très robustes.
  • Facilité d'évolutivité.
  • La propriété de sharding de MongoDB lui permet de fonctionner rapidement et de manière efficace dans les fonctions distribuées. Ceci est également possible car il prend en charge la mise à l'échelle horizontale des données.
  • Le langage est très riche dans la requête. MongoDB a son propre langage de requête appelé langage de requête Mongo, qui peut remplacer ceux de SQL. De même, les fonctions utilitaires et map ou reduce peuvent remplacer les fonctions d'agrégat compliquées.
Figure 1 :Architecture MongoDB

Présentation de CouchDB

CouchDB, un produit Apache Software Foundation et inspiré de Lotus Notes, est également une base de données NoSQL basée sur des documents open source qui se concentre principalement sur la facilité d'utilisation. Il s'agit d'une base de données à nœud unique, fonctionnant exactement comme les autres bases de données. Il commence généralement par l'instance à nœud unique, mais peut être mis à niveau de manière transparente vers le cluster. Il permet à l'utilisateur d'exécuter une seule base de données sur plusieurs serveurs ou machines virtuelles. Un cluster CouchDB offre une capacité et une disponibilité élevées par rapport à CouchDB à nœud unique. Il utilise Erlang, un langage généraliste. Comme MongoDB, il utilise également javascript et map/reduce. Il stocke les données sous la forme d'une collection de documents plutôt que sous forme de tableaux. Le CouchDB mis à jour est sans verrouillage, ce qui signifie qu'il n'est pas nécessaire de verrouiller la base de données pendant les écritures. Les documents de cette base de données utilisent également le protocole HTTP et JSON, ainsi que la possibilité de leur joindre des fichiers non JSON. Ainsi, CouchDB est compatible avec toute application ou logiciel prenant en charge le format JSON.

Les fonctionnalités communes de CouchDB

  • Un serveur CouchDB héberge des bases de données nommées, qui stockent des documents avec un nom unique dans la base de données, et CouchDB fournit une API HTTP RESTful pour lire et mettre à jour (ajouter, modifier, supprimer) des documents de base de données
  • CouchDB fournit une interface graphique basée sur un navigateur pour gérer les données, les autorisations et la configuration.
  • CouchDB fournit la forme de réplication la plus simple.
  • CouchDB facilite l'authentification et le support de session :pour garder l'authentification ouverte via un cookie de session comme une application Web.
  • CouchDB fournit une sécurité au niveau de la base de données où les autorisations par base de données sont séparées en lecteurs et administrateurs. Les lecteurs sont autorisés à lire et à écrire dans la base de données CouchDB.
  • CouchDB valide les données insérées dans la base de données en utilisant l'authentification pour vérifier que le créateur et l'identifiant de session de connexion sont identiques.
Figure 2 :Architecture CouchDB

L'API REST est utilisée pour écrire et interroger les données . Il propose également la lecture, l'ajout, la modification et la suppression de documents. Il utilise le modèle ACID plutôt que l'implémentation BASE by MVCC. Tout comme MongoDB prend en charge la réplication des appareils lorsqu'ils sont hors ligne. Il utilise un modèle de réplication spécial appelé Eventual Consistency. CouchDB est hautement et sérieusement fiable en termes de données. Les bases de données à nœud unique utilisent une structure de données résistante aux pannes avec ajout uniquement, et une base de données multimode ou en cluster peut enregistrer les données de manière redondante afin qu'elles puissent être mises à disposition chaque fois que l'utilisateur en a besoin. CouchDB peut être mis à l'échelle de grands clusters comme des clusters globaux à des clusters aussi petits que des appareils mobiles. La possibilité de fonctionner sur n'importe quel appareil Android ou iOS permet à CouchDB de se démarquer des autres bases de données.

L'architecture CouchDB est distribuée, ce qui prend en charge la synchronisation bidirectionnelle. Il ne nécessite aucun schéma car il utilise un identifiant unique. Bien que CouchDB suive la fonctionnalité AP (disponibilité et tolérance de partition) du modèle CAP, pour surmonter la cohérence échangée, il suit le modèle ACID sur une base pratique.

Comparaisons entre CouchDB et MongoDB

Fonctionnalité de comparaison

CouchDB

MongoDB

Modèle de données

Il suit le modèle orienté document et les données sont présentées au format JSON.

Il suit le modèle orienté document, mais les données sont présentées au format BSON.

Interface

CouchDB utilise une interface HTTP/REST. Il est très intuitif et très bien conçu.

MongoDB utilise le protocole binaire et le protocole personnalisé sur TCP/IP.

Stockage d'objets

Dans CouchDB, la base de données contient des documents.

Dans MongoDB, la base de données contient des collections et la collection contient des documents.

Vitesse

La vitesse de lecture est critique pour la base de données, MongoDB est plus rapide que CouchDB

MongoDB offre des vitesses de lecture plus rapides.

Assistance mobile

CouchDB peut être exécuté sur les appareils Apple iOS et Android, offrant une prise en charge des appareils mobiles.

Pas de support mobile fourni

Taille

La base de données peut grandir avec CouchDB ; MongoDB est mieux adapté à une croissance rapide lorsque la structure n'est pas clairement définie dès le début.

Si nous avons une base de données en croissance rapide, MongoDB est le meilleur choix.

Méthode de requête

Les requêtes utilisent des fonctions de réduction de carte. Bien que cela puisse être une solution élégante, il peut être plus difficile pour les personnes ayant une expérience SQL traditionnelle d'apprendre.

MongoDB suit Map/Reduce (JavaScript) en créant une collection + un langage de requête basé sur des objets. Pour les utilisateurs ayant des connaissances SQL, MongoDB est plus facile à apprendre car il est plus proche dans la syntaxe.

Réplication

CouchDB prend en charge la réplication maître-maître avec des fonctions de résolution de conflits personnalisées.

MongoDB prend en charge la réplication maître-esclave.

Concurrence

Il suit le MVCC (Multi-Version Concurrency Control).

Mettre à jour sur place.

Préférences

CouchDB privilégie la disponibilité.

MongoDB favorise la cohérence.

Cohérence des performances

CouchDB est plus sûr que MongoDB.

MongoDB, la base de données contient des collections et la collection contient des documents.

Cohérence

CouchDB est cohérent à terme.

MongoDB est fortement cohérent.

Écrit en

Il est écrit en Erlang.

Il est écrit en C++.

Analyse

Si nous avons besoin d'une base de données qui s'exécute sur mobile, a besoin d'une réplication maître-maître ou d'une durabilité de serveur unique, alors CouchDB est un excellent choix.

Si nous recherchons un débit maximal ou si nous avons une base de données en croissance rapide, MongoDB est la solution.

CouchDB et MongoDB :des requêtes très différentes

CouchDB et MongDB sont des magasins de données orientés document qui fonctionnent avec des documents JSON, mais en ce qui concerne les requêtes, les deux bases de données ne pourraient pas être plus différentes. CouchDB nécessite des vues prédéfinies (qui sont essentiellement des fonctions JavaScript MapReduce) et MongoDB prend en charge les requêtes dynamiques (essentiellement ce à quoi nous sommes habitués avec les requêtes SQL ad hoc RDBMS normales).

Par exemple, pour insérer des données dans CouchDB à l'aide de RESTClient de Groovy et émettre un message RESTful comme ci-dessous :

import static groovyx.net.http.ContentType.JSON

import groovyx.net.http.RESTClient

 def client = new RESTClient("http://localhost:5498/")

response = client.put(path: "parking_tickets/1280002020",

  contentType: JSON,

  requestContentType:  JSON,

  body: [officer: "Micheal Jordan",

      location: "189 Berkely Road",

      vehicle_plate: "KL5800",

      offense: "Parked in no parking zone",

      date: "2020/02/01"])

Exemple de code d'une fonction pour interroger n'importe quel document dont la propriété d'officier est "Micheal Jordan" :

function(doc) {

  if(doc.officer == "Micheal Jordan"){

emit(null, doc);

  }

}

Lorsque nous envoyons une requête HTTP GET au nom de cette vue, nous pouvons nous attendre à au moins un document comme ci-dessous :

response = client.get(path: "parking_tickets/_view/by_name/officer_grey",

     contentType: JSON, requestContentType: JSON)

assert response.data.total_rows == 1

response.data.rows.each{

   assert it.value.officer == "Micheal Jordan"

}

MongoDB fonctionne un peu comme nous en avons l'habitude avec les bases de données normales :nous pouvons interroger tout ce que notre cœur désire au moment de l'exécution.

Insérer la même instance d'un ticket de parking à l'aide du pilote Java natif de MongoDB :

DBCollection coll = db.getCollection("parking_tickets");

BasicDBObject doc = new BasicDBObject();



doc.put("officer", "Micheal Jordan");

doc.put("location", "189 Berkely Road ");

doc.put("vehicle_plate", "KL5800");

//...

coll.insert(doc);

Pour interroger n'importe quel ticket de MongoDB émis par l'officier Micheal Jordan en lançant simplement une requête sur la propriété de l'officier :

BasicDBObject query = new BasicDBObject();

query.put("officer", "Micheal Jordan");

DBCursor cur = coll.find(query);

while (cur.hasNext()) {

   System.out.println(cur.next());

}

Conclusion

Dans ce blog, nous avons comparé deux bases de données NoSQL basées sur des documents :MongoDB et CouchDB. Le tableau donne un aperçu des principales comparaisons paramétriques entre ces deux bases de données. Comme nous l'avons vu, la priorité du projet déterminera le choix du système. Les principales différences incluent la méthode de réplication et la prise en charge de la plate-forme. De plus, d'après les comparaisons, il est clair que si l'application nécessite plus d'efficacité et de vitesse, alors MongoDB est un meilleur choix plutôt que CouchDB. Si l'utilisateur a besoin d'exécuter sa base de données sur mobile et a également besoin d'une réplication multi-maître, alors CouchDB est un choix évident. De plus, MongoDB convient mieux que CouchDB si la base de données se développe rapidement. Le principal avantage de l'utilisation de CouchDB est qu'il est pris en charge sur les appareils mobiles (Android et iOS) plutôt que sur MongoDB. Donc, fondamentalement, différentes exigences d'application nécessiteront différentes bases de données basées sur des scénarios.

Nous avons observé que MongoDB est légèrement meilleur que CouchDB car il utilise la structure d'interrogation de type SQL, et la même chose est plus facile dans le premier. De plus, pour l'utilisation de requêtes dynamiques, MongoDB est un bien meilleur choix. En ce qui concerne la sécurité dans les deux bases de données, les recherches se poursuivent et il est difficile de dire laquelle de ces bases de données offre un environnement meilleur et sécurisé.