¿Cuándo usar Cassandra? ¿Cuándo usar MongoDB?

¿Qué sistema de base de datos NoSQL debemos usar para nuestra aplicación? ¿Cuándo debemos usar Cassandra? ¿Cuándo debemos usar Mongodb? ¿Cuál es mejor?

No pretendo hacer una comparación entre base de datos NoSQL y una base de datos relacional como MySQL. Cada una tiene sus ventajas y desventajas; además tienen objetivos diferentes. Tampoco hablaremos del poder de las base de datos NoSQL, ni lo grandioso que puede ser Redis para nuestra aplicación.

En esta publicación, compartiré información que será de ayuda para comprender que es Cassandra, y en que se diferencia de MongoDB; además de conocer como funciona MongoDB y  que lo hace diferente de Cassandra.

¿Cuál es mejor?….en realidad ambos son excelentes base de datos NoSQL. ¿Y entonces cuándo debo usar MongoDB? ¿Cuándo debo usar Cassandra?…dependerá mucho de la necesidad de tu aplicación, hay muchas variables que debes analizar, por ejemplo, cantidad de escrituras vs lecturas en la base de datos, almacenamiento constante de información, escalabilidad, velocidad de respuesta, incrementos exponenciales en el consumo de información, datos en constante actualización o bajo porcentaje de modificación, entre otras cosas.

Ambos sistemas de base de datos NoSQL tienen varias fortalezas en común; una de ellas es el poder que tienen para manejar grandes, pero grandes cantidades de datos no estructurados y tener la capacidad de escalar horizontalmente.

¿Puedo escalar mi base de datos con Cassandra y MongoDB?

Si, y no serás el primero en querer hacerlo, Cassandra es la base de datos NoSQL de Instagram, en la cual se almacena más de 80 millones de fotos cargadas todos los días. MongoDB es parte del stack tecnológico de Google Compute Engine.


¿Cómo se almacena la información en ambos sistemas de base de datos?

Cassandra almacena la información en “Columns Families” que son objetos de base de datos similares a las tablas de un sistema de base de datos relacional (como MySQL), las cuales contienen filas y columnas, cada fila con una clave única. A diferencia de un sistema de base de datos relacional, todas las filas de una tabla no están obligadas a tener las mismas columnas. Estas columnas también se pueden agregar sobre la marcha y se accede a ellas utilizando el Lenguaje de Consulta de Cassandra (CQL= Cassandra Query Language). Mientras que CQL es similar a SQL en sintaxis, Cassandra no es relacional, por lo que tiene diferentes formas de almacenar y recuperar datos.

MongoDB almacena la información en documentos similares a JSON que pueden tener estructuras variadas. Utiliza un lenguaje propio de consulta para permitir el acceso a los datos almacenados. Como no tiene esquemas, puede crear documentos sin tener que crear primero la estructura del documento.

¿Quienes usan estas base de datos?

Ambas bases de datos tienen miles de seguidores y grandes organizaciones tecnológicas que confían en ellas.

Cassandra, escrita en Java, fue liberada en el 2008, ha sido utilizada por muchas organizaciones, incluidas AppScale, Constant Contact, Digg, Facebook, Twitter, IBM, Instagram, Spotify, Netflix y Reddit.

MongoDB, escrita en C++, fue liberada en el 2009, ha sido utilizado por muchas organizaciones, entre ellas. Google, UPS, Facebook, Cisco, eBay, BOSH, Adobe, SAP, Forbes y muchos más. Puedes consultar la lista completa aquí.

¿Cuál es la sintaxis para consultar información?

Por ejemplo, si queremos consultar registros de una tabla de Productos.

Cassandra: SELECT * FROM products

MongoDB: db.products.find()

Insertar registros a una tabla de Personas (Contactos).

Cassandra: INSERT INTO contacts (contact_id,name,last_name) VALUES (‘c00001′,’Gonzalo’,’Chacaltana Buleje’)

MongoDB: db.contacts.insert({contact_id:’c00001′,name:’Gonzalo’,last_name:’Chacaltana Buleje’})

Actualizando registros en una tabla de Productos.

Cassandra: UPDATE products SET stock=2000 WHERE product_name=’Milk’

MongoDB: db.products.update.({product_name:’Milk’},{$set:{stock:2000}})

¿Cómo funciona la replicación en estas bases de datos?

Cassandra replica desde el primer momento. Solo le dice la cantidad de nodos a los que debe copiar sus datos y se  ocupa del resto del proceso de replicación.

Cassandra permite tener múltiples bases de datos maestras y en caso de la pérdida de un nodo, Cassandra podrá escribir en el resto de base de datos (Cluster). Esta característica permite una mejor tolerancia a fallas, evitando perder tiempo de inactivividad como podría ocurrir con MongoDB.

MongoDB tiene una replicación incorporada con auto-elecciones, es decir, con MongoDB podrás configurar una base de datos secundaria que se puede convertir de manera automática en una base de datos principal si la base de datos principal (inicial) deja de estar disponible. Sin embargo, MongoDB requiere una cierta configuración (y tal vez un poco de ayuda de soporte) para hacer la replicación. MongoDB tiene conjuntos de réplicas donde un miembro es el primario y todos los demás tienen un rol secundario (Modelo Master-Slave). Las lecturas y escrituras se confirman primero en la réplica principal y luego se replican en las réplicas secundarias.

MongoDB tiene una sola base de datos maestra.

Mientras que el proceso de auto-elección ocurre automáticamente, puede tomar de 10 a 40 segundos para que ocurra. Mientras esto sucede, no puede escribir en el conjunto de réplicas.

¿Quién está actualmente detrás de estas bases de datos?

En el caso de Cassandra: Avinash Lakshman y Prashant Malik desarrollaron Cassandra en Facebook para la función de búsqueda en la bandeja de entrada de Facebook. Facebook lanzó Cassandra en julio de 2008 como un proyecto de código abierto. Apache Software Foundation se encuentra actualmente detrás de la base de datos.

MongoDB se inició en 2007 por la empresa de software 10gen, que creó el producto basado en la palabra “humongous”. En 2009, fue lanzado, y 10gen más tarde cambió el nombre de su compañía a MongoDB, Inc. MongoDB, Inc. proporciona el desarrollo del software y vende su solución empresarial.

¿Qué base de datos es adecuada para mi aplicación?

Una de las mayores fortalezas de Cassandra es su capacidad de escalar sin dejar de ser confiable. Es posible implementar Cassandra en múltiples servidores integrados sin mucho trabajo adicional. Parte de esto se debe a que Cassandra maneja la replicación con una configuración mínima, lo que facilita la configuración.

Si necesita una base de datos que sea fácil de instalar y mantener, independientemente de cuánto crezca su base de datos, Cassandra puede ser una buena opción.

Si trabajas en una industria en la que necesitas un rápido crecimiento de tu base de datos, Cassandra ofrece un crecimiento más fácil y rápido que MongoDB.

MongoDB puede ser una gran opción si necesitas escalabilidad y almacenamiento en caché para análisis en tiempo real; sin embargo, no está diseñado para datos transaccionales.

MongoDB se usa con frecuencia para aplicaciones móviles, administración de contenido, análisis en tiempo real y aplicaciones relacionadas con el IoT (Internet de las cosas). Si tiene una situación en la que no tiene una definición de esquema clara, MongoDB puede ser una buena opción.

Si tienes una situación en la que estás des-normalizando el esquema de tu base de datos, los documentos MongoDB se pueden usar para almacenar los datos no estructurados de una manera que es más fácil de actualizar. En una situación donde la carga de escritura es alta, MongoDB puede ser una buena opción. Ofrece una alta tasa de inserción.

Y entonces ¿Con cuál de las base de datos utilizarías para tu proyecto?

El poder de las bases de datos NoSQL

Las base de datos NoSQL han tenido un crecimiento exponencial en los últimos años, el uso acelerado por grandes empresas para escalar sus aplicaciones transaccionales demuestran que este tipo de tecnología se esta convirtiendo en una excelente alternativa para almacenar información. Por citar algunos ejemplos:

Tesco, uno de los más grandes supermercados del mundo, utiliza base de datos NoSQL para soportar su catálogo de productos, precios, inventarios y sistemas de cupones.

McGraw-Hill, una reconocida firma editorial de presencia mundial, líder en la enseñanza digital, utiliza base de datos NoSQL para impulsar el aprendizaje en linea de su plataforma e-learning.

Sky TV, una importante cadena de televisión satelital, utiliza base de datos NoSQL para administrar los perfiles de usuario de sus más de 20 millones de suscriptores.

Neiman Marcus, una lujosa tienda por departamento de presencia global , utiliza base de datos NoSQL para almacenar los intereses personalizados de sus clientes a través de todos sus canales de venta.

Sabre, uno de los más grandes sistemas de servicio de datos de vuelos del mundo (desarrollada por American Airlines), utiliza base de datos NoSQL para almacenar información de vuelos, pasajeros, rutas, entre otras muchas cosas.

KDDI Corporation, la segunda más grande compañía de telecomunicaciones de Japón, utiliza base de datos NoSQL para administrar las plataformas de sus servicios cloud.

El Ministerio de Salud de Turquía utiliza base de datos NoSQL para almacenar el historial clínico de sus más de 77 millones de ciudadanos.

Ryanair, la más grande aerolínea irlandesa de bajo coste, utiliza base de datos NoSQL en sus aplicaciones móviles para ofrecer una excelente experiencia de venta de pasajes a sus millones de usuarios.

Paypal, sistema de pagos en linea que opera en casi todo el mundo, utiliza base de datos NoSQL para monitorear en tiempo real el tráfico de visitas a su aplicación web.

La lista se hace extensa,muy extensa.

Pero ¿Cómo sucedió esto?

A mediados del 2009, el uso de las base de datos NoSQL eran limitados a empresas de internet como Google, Facebook, Amazon y LinkedIn. Hoy en día, las empresas de casi todas las industrias están implementando soluciones basadas en base de datos NoSQL. Están recurriendo a NoSQL para superar las limitaciones de las tradicionales tecnologías de base de datos relacionales. Y están eligiendo soluciones NoSQL open source sobre productos relacionales licenciados como Oracle, IBM y Microsoft por obvias razones económicas.

Muchas aplicaciones web utilizan una base de datos relacional como fuente principal de almacenamiento transaccional pero utilizan base de datos NoSQL para búsquedas distribuidas y almacenamiento en cache.

El Poder NoSQL

Hay varias razones posibles por las que las empresas están prefiriendo utilizar soluciones NoSQL, pero el escenario más común es probablemente cuando un servidor de base de datos relacional ya no es suficiente para manejar su alta carga transaccional. Las bases de datos NoSQL son mucho más adecuadas para distribuir la carga sobre los servidores de bases de datos.

Esto se debe a que las bases de datos relacionales tratan tradicionalmente el equilibrio de carga mediante la replicación. Esto significa que tiene varias bases de datos esclavos que observan a una base de datos maestra para los cambios y se replican a ellos mismos, el famoso modelo Master/slave. Las aplicaciones utilizan las bases de datos esclavo (Slave) para las lecturas de información, y las escrituras las hacen a la base de datos maestra (Master).

Esto funciona a un cierto nivel, pero tiene el efecto secundario que las base de datos esclavos siempre se quedan un poco atrás, por lo que hay un retraso entre el tiempo de escritura y el tiempo que los datos están disponibles para la lectura. Además, la única base de datos maestra eventualmente se convierte en un cuello de botella, no importa lo poderoso que sea el hardware, el riesgo siempre estará latente.

Las base de datos NoSQL generalmente resuelve este problema mediante el sharding, esto significa que los usuarios con IDUser de 1 a 1000000 están en el servidor A, y los usuarios con IDUser 1000001 a 2000000 están en el servidor B y así sucesivamente. Esto resuelve los problemas de replicación de las bases de datos relacional, pero el inconveniente es que las características tales como las consultas agregadas (SUM, AVG, MAX, MIN) y las transacciones tradicionales se sacrifican.

Casos de Negocio y NoSQL

Las principales soluciones tecnológicas adquiridas por grandes compañías que utilizan base de datos NoSQL son:

1. Administración de perfiles de cuentas de usuarios
2. Aplicaciones Real Time
3. Big Data
4. Gestión de contenidos
5. Administración de clientes 360°
6. Aplicaciones móviles
7. Internet de las cosas (IoT)
8. Comunicación Digital
9. Inteligencia Artificial (AI)
10. Sistemas de Anti-fraudes
11. Sistemas Centralizados de Eventos y Transacciones
12. Analítica Web

NoSQL ha captado claramente el interés e imaginación de los responsables de TI, como una solución escalable, flexible y segura en la que puedan confiar. El respaldo de grandes firmas tecnológicas como Google, Facebook y Amazon avalan que las base de datos NoSQL deban formar parte del stack tecnológico de muchas empresas.

Sistemas de Base de Datos NoSQL

Cada tecnología de base de datos NoSQL resuelve un problema diferente, por ejemplo, algunos están optimizados para ofrecer alta disponibilidad o alta escritura por segundo, distribuido, almacenado en memoria RAM, etc.

Entre las bases de datos NoSQL más destacadas, podemos encontrar a:

Si utilizas otra base de datos NoSQL, por favor compartirlo en un comentario.

Para conocer más de Redis, puedes ingresar a: