NoSQL - MongoDB vs CouchDB [cerrado]

154

Soy un novato completo cuando se trata del movimiento NoSQL. He escuchado mucho sobre MongoDB y CouchDB. Sé que hay diferencias entre los dos. ¿Qué recomienda aprender como primer paso en el mundo NoSQL?

mpenrow
fuente
Como primer paso, mongoDB es mejor porque es más fácil de aprender pero tiene algunos problemas. No hay una mejor opción para usar una base de datos noSQL específica, depende de lo que tenga que hacer. Echa un vistazo a documentos orientados, valores clave, gráficos, columnas.
Chris

Respuestas:

148

Ver los siguientes enlaces

Actualización : encontré una gran comparación de las bases de datos NoSQL .

MongoDB (3.2)

  • Escrito en: C ++
  • Punto principal: almacén de documentos JSON
  • Licencia: AGPL (Controladores: Apache)
  • Protocolo: Personalizado, binario (BSON)
  • Replicación maestro / esclavo (conmutación por error automática con conjuntos de réplica)
  • Fragmento incorporado
  • Las consultas son expresiones javascript
  • Ejecute funciones arbitrarias de JavaScript del lado del servidor
  • Tiene indexación geoespacial y consultas
  • Múltiples motores de almacenamiento con diferentes características de rendimiento.
  • Rendimiento sobre características
  • Validación de documentos
  • Diario
  • Potente marco de agregación
  • En sistemas de 32 bits, limitado a ~ 2.5 Gb
  • Búsqueda de texto integrada
  • GridFS para almacenar big data + metadatos (en realidad no es un FS)
  • Centro de datos consciente

Mejor utilizado : si necesita consultas dinámicas. Si prefiere definir índices, no asignar / reducir funciones. Si necesita un buen rendimiento en una gran base de datos. Si quería CouchDB, pero sus datos cambian demasiado, llenando los discos.

Por ejemplo : para la mayoría de las cosas que haría con MySQL o PostgreSQL, pero tener columnas predefinidas realmente lo detiene.

CouchDB (1.2)

  • Escrito en: Erlang
  • Punto principal: consistencia de la base de datos, facilidad de uso
  • Licencia: Apache
  • Protocolo: HTTP / REST
  • Replicación bidireccional (!)
  • continua o ad-hoc,
  • con detección de conflictos,
  • así, replicación maestro-maestro. (!)
  • MVCC: las operaciones de escritura no bloquean las lecturas
  • Versiones anteriores de documentos están disponibles
  • Diseño de solo bloqueo (confiable)
  • Necesita compactarse de vez en cuando
  • Vistas: mapa incrustado / reducir
  • Vistas de formato: listas y espectáculos
  • Validación de documentos del lado del servidor posible
  • Autenticación posible
  • Actualizaciones en tiempo real a través de '_changes' (!)
  • Manejo de archivos adjuntos

Mejor utilizado : para acumular datos que cambian ocasionalmente, en los que se ejecutarán consultas predefinidas. Lugares donde las versiones son importantes.

Por ejemplo : CRM, sistemas CMS. La replicación maestro-maestro es una característica especialmente interesante, que permite implementaciones fáciles en múltiples sitios.

amra
fuente
1
Para cualquier persona interesada en que la licencia de servidor de MongoDB sea AGPL, echar un vistazo a la política de licencias de mongodb puede proporcionar algún alivio.
Patrick
@amra Entonces, ¿quiere decir que si guardo los datos y los leo solo, usar couchdb es la mejor opción?
verystrongjoe
@verystrongjoe Depende de la complejidad de los datos y las consultas. Generalmente no se puede decir cuál es el mejor.
amra
@amra Ok. Pero .. Si va a acumular datos y seleccionar los datos y tengo que elegir entre mongo y sillón, ¿cuál es mejor?
verystrongjoe
CouchApps "ya no se recomienda" desde ~ 2012: docs.couchdb.com/en/latest/ddocs
Tim Sylvester
123

Si viene del mundo de MySQL, MongoDB se "sentirá" mucho más natural para usted debido a su soporte de lenguaje similar a la consulta.

Creo que eso es lo que lo hace tan amigable para mucha gente.

CouchDB es fantástico si desea utilizar el excelente soporte de replicación maestro-maestro con una configuración de múltiples nodos, posiblemente en diferentes centros de datos o algo así.

La replicación de MongoDB (conjuntos de réplica) es una configuración maestro-esclavo-esclavo-esclavo- *, solo puede escribir al maestro en un conjunto de réplica y leer desde cualquiera de ellos.

Para una configuración de sitio estándar, está bien. Se asigna al uso de MySQL realmente bien.

Pero si está tratando de crear un servicio global como un CDN que necesita mantener todos los nodos globales sincronizados a pesar de leer / escribir en todos ellos, algo como la replicación en CouchDB será de gran ayuda para usted.

Si bien MongoDB tiene un lenguaje de consulta que puede usar y se siente muy intuitivo, CouchDB adopta un enfoque de "reducción de mapas" y estos conceptos de vistas. Al principio se siente extraño, pero a medida que se acostumbra, realmente comienza a sentirse intuitivo.

Aquí hay una descripción rápida, por lo que tiene sentido:

  • CouchDB almacena todos sus datos en un árbol b
  • No puede "consultarlo" dinámicamente con algo como "SELECCIONAR * DESDE el usuario DONDE ..."
  • En su lugar, define "vistas" discretas de sus datos ... "aquí está una vista de todos mis usuarios", "aquí está una vista de todos los usuarios mayores de 10" "aquí está una vista de todos los usuarios mayores de 30" y pronto.
  • Estas vistas se definen mediante el enfoque de reducción de mapas y se definen como funciones de JavaScript.
  • Cuando define una vista, la base de datos comienza a alimentar todos los documentos de la base de datos a la que asignó la vista, a través de ella y registra los resultados de sus funciones como el "índice" en esos datos.
  • Hay algunas consultas básicas que puede hacer en las vistas, como solicitar una clave específica (ID) o un rango de ID, independientemente de lo que haga su función de mapa / reducción.
  • Lea estas diapositivas , es la mejor aclaración de mapa / reducción en Couch que he visto.

Entonces, ambas fuentes usan documentos JSON, pero CouchDB sigue este enfoque más "cada servidor es un maestro y puede sincronizarse con el mundo", lo cual es fantástico si lo necesita, mientras que MongoDB es realmente el MySQL del mundo NoSQL.

Entonces, si eso suena más como lo que necesitas / quieres, ve por eso.

Pequeñas diferencias como el protocolo binario de Mongo frente a la interfaz RESTful de CouchDB son detalles menores.

Si desea una velocidad sin procesar y al infierno con la seguridad de los datos, puede hacer que Mongo funcione más rápido que CouchDB, ya que puede decir que funcione sin memoria y que no envíe cosas al disco, excepto por intervalos escasos.

Puede hacer lo mismo con Couch, pero su protocolo de comunicación basado en HTTP va a ser 2-4 veces más lento que la comunicación binaria sin procesar con Mongo en esta "velocidad sobre todo". guión.

Tenga en cuenta que la velocidad loca loca es inútil si un bloqueo del servidor o una falla del disco corrompe y brinda por descuido a su DB, por lo que ese punto de datos no es tan sorprendente como podría parecer (a menos que esté haciendo sistemas de comercio en tiempo real en Wall Street, en cuyo caso mira Redis).

Espero que todo ayude!

Riyad Kalla
fuente
"MongoDB es realmente el MySQL del mundo NoSQL" - No sé si las cosas han cambiado, pero este artículo de 2014 no está de acuerdo: sarahmei.com/blog/2013/11/11/why-you-should-never-use- mongodb
Onur Yıldırım
Si bien, en términos generales, creo que el comentario aún funciona, tienes razón, MUCHO ha cambiado en la última media década y mi comentario debería descartarse fácilmente.
Riyad Kalla
1

Ahora hay muchas más bases de datos NoSQL en el mercado que nunca. Sugiero incluso echar un vistazo al Cuadrante Mágico de Gartner si está buscando una base de datos que también sea ideal para aplicaciones empresariales basadas en soporte, capacidad de expansión, administración y costo.

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

Me gustaría sugerir Couchbase a cualquiera que aún no lo haya probado, pero que no se base en la versión que se muestra en el informe (2.5.1) porque hay casi 2 revisiones detrás de donde está CB Server hoy, cerca del lanzamiento de 4.0 en 2H15 .

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

La otra parte acerca de Couchbase como proveedor / producto es que es un tipo de DB de usos múltiples. Puede actuar como una tienda K / V pura, base de datos orientada a documentos con escalamiento multidimensional, Memcached, almacenamiento en caché con persistencia, y admite SQL compatible con ANSI 92 con uniones automáticas, replicación a clústeres DR con solo presionar un botón, y incluso tiene un componente móvil integrado en el ecosistema.

Por lo menos, vale la pena consultar los últimos puntos de referencia:

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

Austin Gonyou
fuente