MongoDB vs Cassandra [cerrado]


Estoy evaluando cuál podría ser la mejor opción de migración.

Actualmente, estoy en una MySQL fragmentada (partición horizontal), con la mayoría de mis datos almacenados en blobs JSON. No tengo ninguna consulta SQL compleja (ya migrada desde que particioné mi base de datos).

En este momento, parece que MongoDB y Cassandra serían opciones probables. Mi situación:

  • Muchas lecturas en cada consulta, menos escrituras regulares
  • No me preocupa "masivo" escalabilidad
  • Más preocupado por la configuración simple, el mantenimiento y el código
  • Minimizar el costo de hardware / servidor
Author: Community, 2010-05-23

6 answers

Muchas lecturas en cada consulta, menos escrituras regulares

Ambas bases de datos funcionan bien en lecturas donde el conjunto de datos calientes encaja en la memoria. Ambos también enfatizan los modelos de datos sin unión (y fomentan la desnormalización en su lugar), y ambos proporcionan índices en documentos o filas, aunque los índices de MongoDB son actualmente más flexibles.

El motor de almacenamiento de Cassandra proporciona escrituras en tiempo constante sin importar el tamaño de su conjunto de datos. Las escrituras son más problemáticas en MongoDB, en parte debido al motor de almacenamiento basado en b-tree, pero más debido al bloqueo de multigranularidad que lo hace.

Para el análisis, MongoDB proporciona una implementación personalizada de map/reduce; Cassandra proporciona soporte nativo de Hadoop, incluido para Hive (un almacén de datos SQL construido en Hadoop map/reduce) y Pig (un lenguaje de análisis específico de Hadoop que muchos piensan que es mejor para map/reduce cargas de trabajo que SQL). Cassandra también apoya el uso de Spark .

No me preocupa la escalabilidad "masiva"

Si estás buscando un solo servidor, MongoDB es probablemente una mejor opción. Para aquellos más preocupados por el escalado, la arquitectura sin punto único de falla de Cassandra será más fácil de configurar y más confiable. (El bloqueo de escritura global de MongoDB también tiende a ser más doloroso.) Cassandra también da mucho más control sobre cómo funciona su replicación, incluyendo soporte para múltiples datos centrar.

Más preocupado por la configuración simple, el mantenimiento y el código

Ambos son triviales de configurar, con valores predeterminados razonables listos para usar para un solo servidor. Cassandra es más fácil de configurar en una configuración multi-servidor ya que no hay nodos de roles especiales de los que preocuparse; aquí hay un screencast que demuestra la configuración de un clúster de Cassandra de 4 nodos en dos minutos.

Si actualmente está utilizando blobs JSON, MongoDB es una excelente combinación para su uso caso, dado que utiliza BSON para almacenar los datos. Podrá tener datos más ricos y consultables de lo que lo haría en su base de datos actual. Esta sería la victoria más significativa para Mongo.

 538
Author: Michael,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-09-28 20:52:08

He usado MongoDB ampliamente (durante los últimos 6 meses), construyendo un sistema de gestión de datos jerárquico, y puedo responder por la facilidad de configuración (instalarlo, ejecutarlo, usarlo!) y la velocidad. Siempre y cuando pienses en los índices cuidadosamente, puede gritar absolutamente a lo largo, en cuanto a velocidad.

Deduzco que Cassandra, debido a su uso con proyectos a gran escala como Twitter, tiene una mejor funcionalidad de escalado, aunque el equipo de MongoDB está trabajando en la paridad allí. Debo señalar que he no usé a Cassandra más allá de la etapa de prueba, así que no puedo hablar por el detalle.

El verdadero swinger para mí, cuando estábamos evaluando las bases de datos NoSQL, fue la consulta - Cassandra es básicamente solo un almacén de claves/valores gigante, y la consulta es un poco complicada (al menos en comparación con MongoDB), por lo que para el rendimiento tendría que duplicar una gran cantidad de datos como una especie de índice manual. MongoDB, por otro lado, utiliza un modelo de "consulta por ejemplo".

Por ejemplo, digamos que tienes una Colección (Lenguaje MongoDB para el equivalente a una tabla RDMS) que contiene Usuarios. MongoDB almacena registros como Documentos, que son básicamente objetos JSON binarios. por ejemplo:

{
   FirstName: "John",
   LastName: "Smith",
   Email: "[email protected]",
   Groups: ["Admin", "User", "SuperUser"]
}

Si desea encontrar a todos los usuarios llamados Smith que tienen derechos de administrador, simplemente cree un nuevo documento (en la consola de administración usando Javascript, o en producción usando el lenguaje de su elección):

{
   LastName: "Smith",
   Groups: "Admin"
}

...y luego ejecutar la consulta. Eso es. Hay operadores agregados para comparaciones, filtrado de expresiones regulares, etc., pero todo es bastante simple, y la documentación basada en Wiki es bastante buena.

 140
Author: Richard K.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-07-01 22:29:02

¿Por qué elegir entre una base de datos tradicional y un almacén de datos NoSQL? ¡Usa ambos! El problema con las soluciones NoSQL (más allá de la curva de aprendizaje inicial) es la falta de transacciones you usted hace todas las actualizaciones a MySQL y tiene MySQL llenar un almacén de datos NoSQL para lecturas you luego se beneficia de las fortalezas de cada tecnología. Esto agrega más complejidad, pero ya tiene el lado MySQL just solo agregue MongoDB, Cassandra, etc. a la mezcla.

Los almacenes de datos NoSQL generalmente escalan mucho mejor que un base de datos tradicional para las mismas especificaciones de lo contrario there hay una razón por la que Facebook, Twitter, Google y la mayoría de las empresas emergentes están utilizando soluciones NoSQL. No son sólo los geeks drogándose con la nueva tecnología.

 100
Author: Jason Grant Taylor,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-04-17 00:45:52

Probablemente voy a ser un hombre extraño, pero creo que necesitas quedarte con MySQL. No ha descrito un problema real que necesite resolver, y MySQL / InnoDB es un excelente back-end de almacenamiento incluso para datos blob / json.

Hay un truco común entre los ingenieros web para tratar de usar más NoSQL tan pronto como se da cuenta de que no se utilizan todas las características de un RDBMS. Esto por sí solo no es una buena razón, ya que la mayoría de las veces las bases de datos NoSQL tienen motores de datos bastante pobres (lo que MySQL llama un almacenamiento motor).

Ahora, si no es de ese tipo, especifique lo que falta en MySQL y lo que está buscando en una base de datos diferente (como, auto-sharding, conmutación por error automática, replicación multi-master, una garantía de consistencia de datos más débil en el clúster que se amortiza en un mayor rendimiento de escritura, etc.).

 55
Author: Kostja,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-02-23 20:50:13

No he usado Cassandra, pero he usado MongoDB y creo que es increíble.

Si después de una configuración simple, esto es todo. Simplemente untar MongoDB y ejecutar el demonio mongod y eso es it..it está corriendo.

Obviamente eso es solo un comienzo, pero para empezar es fácil.

 18
Author: dalton,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-05-23 17:57:05

Vi una presentación sobre Mongodb ayer. Definitivamente puedo decir que la configuración fue "simple", tan simple como desempaquetarla y encenderla. Terminado.

Creo que tanto mongodb como cassandra se ejecutarán en prácticamente cualquier hardware linux normal, por lo que no debería encontrar mucha barrera en esa área.

Creo que en este caso, al final del día, se reducirá a qué te sientes personalmente más cómodo con y que tiene un conjunto de herramientas que prefieras. En cuanto a la presentación en mongodb, el presentador indicó que el conjunto de herramientas para mongodb era bastante ligero y que no había muchas (dijeron que realmente) herramientas similares a las disponibles para MySQL. Esta fue, por supuesto, su experiencia así YMMV. Una cosa que me gustó de mongodb fue que parecía haber mucho soporte de lenguaje para él (Python y.NET son los dos que uso principalmente).

La lista de sitios que usan mongodb es bastante impresionante , y sé que twitter acaba de cambiar a usar cassandra.

 12
Author: GrayWizardx,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-05-23 17:57:33