sql >> Base de Datos >  >> NoSQL >> MongoDB

La batalla de las bases de datos NoSQL:comparación de MongoDB y CouchDB

MongoDB y CouchDB son tipos de bases de datos NoSQL basadas en documentos. Una base de datos de documentos también se denomina almacén de documentos y, por lo general, se utilizan para almacenar el formato del documento de los datos semiestructurados y una descripción detallada de los mismos. Permite la creación y actualización de programas sin necesidad de consultar el esquema maestro. La gestión de contenidos y el manejo de datos en la aplicación móvil son dos de los campos donde se puede aplicar el almacén de documentos.

Descripción general de MongoDB

MongoDB fue la puesta en marcha de 10gen, que se originó en 2007. Proveniente de la familia de almacenes de documentos, es una de las típicas bases de datos NoSQL sin esquemas con un rendimiento comparativamente alto, escalabilidad y es rico en funciones de procesamiento de datos. Esta base de datos de código abierto está escrita en C++ y utiliza esquemas dinámicos. La arquitectura de MongoDB contiene documentos agrupados en colecciones según su estructura. Esta base de datos hace uso de BSON. BSON es la representación binaria de JSON y admite el almacenamiento de documentos y el intercambio de datos. En MongoDB, los temas comerciales se pueden almacenar en una cantidad mínima de documentos, que se pueden indexar principal o secundariamente, sin dividirlos en múltiples documentos relacionales.

Junto con las capacidades mencionadas anteriormente de MongoDB, también proporciona una gran colección de conjuntos de réplicas donde cada conjunto puede contener más de una copia de datos. En los conjuntos de réplica, todas las funciones primarias (lectura y escritura) se realizan en el conjunto principal, mientras que los conjuntos secundarios se utilizan en caso de falla del primero. MongoDB incorpora fragmentación, que hace uso del proceso de escalado horizontalmente. La propiedad de equilibrio de carga de esta base de datos de almacenamiento de documentos se justifica por el hecho de que se ejecuta en varios servidores, lo que proporciona duplicación de datos y equilibrio de la carga. A cambio, también proporciona respaldo durante la falla del hardware. También hace uso de un sistema de archivos de cuadrícula que divide el archivo en particular en diferentes partes y las almacena por separado.

Las características comunes de MongoDB:

  • El diseño del modelo de datos reduce la necesidad de uniones y facilita la evolución del esquema.
  • Alto rendimiento, ya que no contiene uniones ni transacciones que proporcionan un acceso rápido y, por lo tanto, aumenta el rendimiento.
  • Alta disponibilidad debido a la incorporación de conjuntos de réplicas que pueden proporcionar respaldo durante fallas y también son altamente robustos.
  • Fácil escalabilidad.
  • La propiedad de fragmentación de MongoDB le permite funcionar de manera rápida y eficiente en las funciones distribuidas. Esto también es posible ya que admite la escala horizontal de datos.
  • El lenguaje es muy rico en la consulta. MongoDB tiene su propio lenguaje de consulta llamado lenguaje de consulta Mongo, que puede reemplazar a los de SQL. Del mismo modo, las funciones de utilidad y map o reduce pueden reemplazar funciones agregadas complicadas.
Figura 1:Arquitectura MongoDB

Descripción general de CouchDB

CouchDB, un producto de Apache Software Foundation e inspirado en Lotus Notes, también es una base de datos NoSQL basada en documentos de código abierto que se centra principalmente en la facilidad de uso. Es una base de datos de un solo nodo, que funciona exactamente como otras bases de datos. Por lo general, comienza con la instancia de un solo nodo, pero se puede actualizar sin problemas al clúster. Permite al usuario ejecutar una sola base de datos en muchos servidores o máquinas virtuales. Un clúster de CouchDB proporciona alta capacidad y disponibilidad en comparación con CouchDB de un solo nodo. Utiliza Erlang, un lenguaje de propósito general. Al igual que MongoDB, también usa javascript y map/reduce. Almacena datos en forma de una colección de documentos en lugar de tablas. La CouchDB actualizada no tiene bloqueo, lo que significa que no es necesario bloquear la base de datos durante las escrituras. Los documentos en esta base de datos también utilizan el protocolo HTTP y JSON, junto con la capacidad de adjuntarles archivos que no son JSON. Por lo tanto, CouchDB es compatible con cualquier aplicación o software que admita el formato JSON.

Las características comunes de CouchDB

  • Un servidor CouchDB aloja bases de datos con nombre, que almacenan documentos con un nombre único en la base de datos, y CouchDB proporciona una API RESTful HTTP para leer y actualizar (agregar, editar, eliminar) documentos de la base de datos
  • CouchDB proporciona una GUI basada en navegador para manejar los datos, los permisos y la configuración.
  • CouchDB proporciona la forma más simple de replicación.
  • CouchDB facilita la autenticación y el soporte de sesión:para mantener la autenticación abierta a través de una cookie de sesión como una aplicación web.
  • CouchDB brinda seguridad a nivel de base de datos donde los permisos por base de datos se separan en lectores y administradores. Los lectores pueden leer y escribir en la base de datos de CouchDB.
  • CouchDB valida los datos insertados en la base de datos mediante la autenticación para verificar que el creador y la identificación de la sesión de inicio de sesión sean los mismos.
Figura 2:Arquitectura CouchDB

La API REST se usa para escribir y consultar los datos . También ofrece lectura, adición, edición y eliminación de documentos. Utiliza el modelo ACID en lugar de BASE por la implementación de MVCC. Al igual que MongoDB admite la replicación de dispositivos cuando están fuera de línea. Utiliza un modelo de replicación especial llamado Consistencia Eventual. CouchDB es altamente confiable en términos de datos. Las bases de datos de un solo nodo hacen uso de una estructura de datos resistente a fallas de solo anexar, y una base de datos multimodo o de clúster puede guardar los datos de manera redundante para que estén disponibles cuando el usuario los necesite. CouchDB se puede escalar desde clústeres grandes como clústeres globales hasta clústeres tan pequeños como dispositivos móviles. La capacidad de ejecutarse en cualquier dispositivo Android o iOS hace que CouchDB se destaque entre otras bases de datos.

La arquitectura CouchDB es distribuida, lo que admite sincronización bidireccional. No requiere ningún esquema, ya que utiliza una identificación única. Aunque CouchDB sigue la función AP (disponibilidad y tolerancia a la partición) del modelo CAP, para superar la consistencia negociada, sigue el modelo ACID de forma práctica.

Comparaciones entre CouchDB y MongoDB

Característica de comparación

CouchDB

MongoDB

Modelo de datos

Sigue el modelo orientado a documentos y los datos se presentan en formato JSON.

Sigue el modelo orientado a documentos, pero los datos se presentan en formato BSON.

Interfaz

CouchDB utiliza una interfaz basada en HTTP/REST. Es muy intuitivo y está muy bien diseñado.

MongoDB usa el protocolo binario y el protocolo personalizado sobre TCP/IP.

Almacenamiento de objetos

En CouchDB, la base de datos contiene documentos.

En MongoDB, la base de datos contiene colecciones y la colección contiene documentos.

Velocidad

La velocidad de lectura es crítica para la base de datos, MongoDB es más rápido que CouchDB

MongoDB proporciona velocidades de lectura más rápidas.

Soporte móvil

CouchDB se puede ejecutar en dispositivos Apple iOS y Android, ofreciendo soporte para dispositivos móviles.

No se proporciona soporte móvil

Tamaño

La base de datos puede crecer con CouchDB; MongoDB es más adecuado para un crecimiento rápido cuando la estructura no está claramente definida desde el principio.

Si tenemos una base de datos en rápido crecimiento, MongoDB es la mejor opción.

Método de consulta

Las consultas utilizan funciones de reducción de mapas. Si bien puede ser una solución elegante, puede ser más difícil de aprender para las personas con experiencia en SQL tradicional.

MongoDB sigue a Map/Reduce (JavaScript) creando una colección + lenguaje de consulta basado en objetos. Para los usuarios con conocimientos de SQL, MongoDB es más fácil de aprender ya que tiene una sintaxis más cercana.

Replicación

CouchDB admite la replicación maestro-maestro con funciones personalizadas de resolución de conflictos.

MongoDB admite la replicación maestro-esclavo.

Concurrencia

Sigue el MVCC (Multi-Version Concurrency Control).

Actualizar en el lugar.

Preferencias

CouchDB favorece la disponibilidad.

MongoDB favorece la coherencia.

Coherencia de rendimiento

CouchDB es más seguro que MongoDB.

MongoDB, la base de datos contiene colecciones y la colección contiene documentos.

Coherencia

CouchDB eventualmente es consistente.

MongoDB es muy consistente.

Escrito

Está escrito en Erlang.

Está escrito en C++.

Análisis

Si necesitamos una base de datos que se ejecute en un dispositivo móvil, necesitamos replicación maestro-maestro o durabilidad de un solo servidor, entonces CouchDB es una excelente opción.

Si estamos buscando el máximo rendimiento o tenemos una base de datos en rápido crecimiento, MongoDB es el camino a seguir.

CouchDB y MongoDB:consultas muy diferentes

CouchDB y MongDB son almacenes de datos orientados a documentos que funcionan con documentos JSON, pero cuando se trata de consultas, ambas bases de datos no podrían ser más diferentes. CouchDB requiere vistas predefinidas (que son esencialmente funciones JavaScript MapReduce) y MongoDB admite consultas dinámicas (básicamente a lo que estamos acostumbrados con las consultas SQL ad-hoc RDBMS normales).

Por ejemplo, para insertar algunos datos en CouchDB usando RESTClient de Groovy y emitir una publicación RESTful como se muestra a continuación:

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"])

Ejemplo de código de una función para consultar cualquier documento cuya propiedad oficial sea "Micheal Jordan":

function(doc) {

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

emit(null, doc);

  }

}

Cuando  emitimos una solicitud HTTP GET al nombre de esa vista, podemos esperar al menos un documento como el siguiente:

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 funciona de manera muy parecida a como estamos acostumbrados con las bases de datos normales:podemos consultar lo que nuestro corazón desee en tiempo de ejecución.

Insertar la misma instancia de una multa de estacionamiento utilizando el controlador Java nativo 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);

Para consultar cualquier ticket de MongoDB emitido por el oficial Micheal Jordan simplemente emitiendo una consulta en la propiedad del oficial:

BasicDBObject query = new BasicDBObject();

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

DBCursor cur = coll.find(query);

while (cur.hasNext()) {

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

}

Conclusión

En este blog, hemos comparado dos bases de datos NoSQL basadas en documentos:MongoDB y CouchDB. La tabla ofrece una descripción general de las principales comparaciones paramétricas entre estas dos bases de datos. Como hemos visto, la prioridad del proyecto determinará la selección del sistema. Las principales diferencias incluyen el método de replicación y el soporte de la plataforma. Además, a partir de las comparaciones, está claro que si la aplicación requiere más eficiencia y velocidad, entonces MongoDB es una mejor opción que CouchDB. Si el usuario necesita ejecutar su base de datos en un dispositivo móvil y también necesita una replicación multimaestro, entonces CouchDB es una opción obvia. Además, MongoDB se adapta mejor que CouchDB si la base de datos está creciendo rápidamente. La principal ventaja de usar CouchDB es que es compatible con dispositivos móviles (Android e iOS) en lugar de MongoDB. Básicamente, los diferentes requisitos de las aplicaciones requerirán diferentes bases de datos según los escenarios.

Hemos observado que MongoDB es ligeramente mejor que CouchDB, ya que utiliza la estructura de consulta similar a SQL, y lo mismo es más fácil en el primero. Además, para usar consultas dinámicas, MongoDB es una opción mucho mejor. Con respecto a la seguridad en ambas bases de datos, aún se está investigando y es difícil decir cuál de ellas proporciona un entorno mejor y más seguro.