Jul 02

Apache Cassandra vs MongoDB

 Llevamos haciendo pruebas unos días para comparar Apache Cassandra y MongoDB. Nuestro objetivo inicial es insertar datos más o menos grandes (unos 80KBytes)  a razón de 5 inserciones por segundo. No es nada del otro mundo, a poco que nos pongamos posiblemente hasta una base de datos SQL normal nos valga. Sin embargo, queríamos jugar con estas dos bases de datos noSQL y ver qué pasa.

En un mismo servidor hemos montado ambas bases de datos y realizado las inserciones A veces simultáneamente en las dos bases de datos, a veces sólo en una.

En Cassandra configuramos el tiempo de vida de los datos en unas 5 horas, de forma que los datos más viejos de 5 horas se borrarán automáticamente. Mongo tiene dos opciones, una, al igual que Cassandra es la de tiempo de vida, pero otra que nos parece más interesante es la de espacio en disco duro. Así que configuramos Mongo para que borrara automáticamente datos viejos cuando la colección ocupara 10 Gigas.

Pues bien, en estas condiciones, tanto antes de empezar borrados automáticos como después, ambas bases de datos van sobradas. Pueden perfectamente insertar datos y permitir las consultas simultáneamente. Sin embargo, echando un ojo al consumo de recursos, vemos que mongo consume bastante menos en CPU y aunque cassandra tampoco consume demasiado, sí tiene unos picos de consumo de CPU bastante importantes periódicamente. Seguramente algunas de las tareas de mantenimiento del propio cassandra que saltan de vez en cuando.

Logo mongodbCuando empieza el borrado, vemos en disco que mongo tiene sus 10 Gigas y no se pasa ni un pelo. Vemos sin embargo que cassandra sigue creciendo y que hay que esperar a alguna de esas tareas de mantenimiento para que el disco realmente reduzca su espacio.

En cuanto a consultas, mucho mejor mongo. En cassandra nos pasan dos cosas. Un simple select count(*) da timeout, sin necesidad de que haya más allá de un par de miles de registros. La consulta en cassandra de los datos, poniendo bien los índices en la condición y tal va bien, pero nos da esos misteriosos problemas que da a veces cassandra diciendo que no hay bastantes réplicas (¿1 necesaria, 0 disponibles? ¿con un solo servidor que está arrancado?) y sucede cuando consultas en el periodo de tiempo que acaba de borrar por pasarse el tiempo de vida, porque si consultamos dentro de la zona termporal en la que todavía hay datos, entonces los devuelve sin errores.

Bueno, seguro que se puede arreglar y optimizar, pero sin haberse matado en configuraciones, mongo va bien y cassandra hace alguna cosa rara.

Vamos más allá con la prueba. Se supone que cassandra es más rápido en inserciones, así que decidimos insertar datos de pocos bytes (unos 40 bytes), pero del orden de 250 por segundo. Vemos que ambas bases de datos aguantan el ritmo. Vamos subiendo a 500 por segundo, 750 por segundo, etc, etc…. Sorpresa. Mongo va mejor que Cassandra. Mongo aguanta cerca de 1000 por segundo (en nuestro servidor, con nuestro disco, si lo haces en otro será otro resultado), mientras que cassandra ya no puede con 750.

Insisto, no nos hemos matado en optimizar, inserts a pelo, nada de batch, ni bulk inserts ni similar. Lo tenemos pendiente de probar.

De todas formas, y antes estas primeras impresiones, creo que nos quedamos con mongo, al menos para nuestras necesidades. Nos quedan pruebas en cluster,, donde siempre según los de Cassandra, Cassandra es mejor en el sentido que de que si pones el doble de servidores, tienes el doble de todo, mientras que con mongo no es así  En cualquier caso, haremos las pruebas por hacerlas, puesto que en producción no tendremos clusters.

Entradas relacionadas:

2 Responses to “Apache Cassandra vs MongoDB”

  1. GreenEyed Says:

    Pues vaya, me dejas frío por que yo ahora estoy usando Redis para algunas cosas, del orden de 400-500 inserts/s de hasta 300Kb y quería experimentar con Cassandra a ver si iba mejor por que el cluster de Redis me parece un poco inmaduro, y como tocará escalar más…

    Me extraña que en producción no tengais previsto un cluster, aunque solo sea por poder realizar mantenimientos sin parada de servicio, pero supongo que los requisitos son diferentes.

  2. Chuidiang Says:

    Hola @GreenEyed, cuánto tiempo 🙂

    Dale una oportunidad a Cassandra. Supuestamente (no he hecho pruebas aun), para cluster escala mejor que mongo.

    Si, supongo que los requisitos son distintos. Lo nuestro va en un barco y el hueco físico es el que es, no caben dos servidores.

    Se bueno.

Leave a Reply