¡¡¡¡AAAaaaarghh!!!! ¡Hay demasiadas opciones!
Bueno, bueno, bueno ….
Llevo unas cuantas horas (mas bien días) leyendo sobre el tema y lo primero que llama la atención es la cantidad de opciones distintas de sistemas de administración de bases de datos NoSQL que hay disponibles en el mundo Open Source. Si citamos las más conocidas tenemos: MongoDB, CouchDB, Cassandra, Membase, Redis, Riak, Neo4J, FlockDB y HBase, entre otras.
Lo primero que recomendaría sería dar una lectura rápida al artículo NoSQL de la wikipedia en inglés (con aportaciones del menda lerenda ) y el primer artículo de la serie Picking the Right NoSQL Database Tool.
Un resumen rápido sería que según la manera de almacenar los datos las bases de datos NoSQL se dividen en …
- Orientadas a documentos
- Como MongoDB y CouchDB. Almacenan los datos en formatos estructurados (registros) como JSON.
Ejemplo de documento en JSON
"Last Name": "PELLERIN",
"First Name": "Franck",
"Age": 29,
"Address": {
"Street": "1 chemin des Loges",
"City": "VERSAILLES"
}
}
- Clave-Valor
- Como Cassandra, Membase, Redis o Riak. Almacenan los datos en pares clave-valor (un valor podría ser un objeto)
- de Grafos
- Como Neo4J y FlockDB. Almacenan los elementos y las relaciones entre ellos con un estilo de grafo (para redes sociales, redes de transporte, mapas de carreteras, topologías de red, por ejemplo)
- Tabulares
- Como Cassandra o HBase. Almacenan los datos en filas, con varias columnas que corresponden a una clave, con un resultado similar a una tabla
Preguntas que debemos hacernos
Al final la elección de una u otra opción va a depender fundamentalmente del tipo de datos que manejemos y de la naturaleza del problema que queramos solucionar. No hay una base de datos NoSQL “tope de gama”, ni una o dos soluciones que podamos emplear siempre. Según la naturaleza de lo que queramos soluciones usaremos una u otra, o incluso varias simultáneamente.
Y desde luego, una solución NoSQL no sustituye a una base de datos relacional, la complementa. A menos, claro, que estemos usando una base SQL para el problema equivocado.
Deberíamos poder responder a las siguientes preguntas antes de elegir una opción:
- ¿Qué tipos de datos manejamos? ¿Arrays asociativos, pares de clave-valor, datos estructurados (XML o similar)?
- ¿Necesitamos transacciones?
- ¿Necesitamos usar MapReduce
Y al revisar las distintas opciones:
- ¿La última versión está considerada estable?
- ¿Tiene soporte comercial?
- ¿Cuál es la curva de aprendizaje? ¿Dispone de documentación y/o de una comunidad activa?
Enlaces interesantes
- Cassandra vs MongoDB vs CouchDB vs Redis vs Riak vs HBase vs Membase vs Neo4j comparison del blog de Kristóf Kovács
- Picking the Right NoSQL Database Tool del blog de Monitis
- Consistency Models in Non-Relational Databases de Guy Harrison. Una muy buena explicación del Teorema CAP, del concepto Consistencia eventual y de cómo estos problemas de consistencia son tratados en sistemas distribuídos.
Ver también
El resto de esta serie de artículos
Comentarios
Actualmente no hay comentarios a este artículo.
Añadir comentarios ...