Our Blog

NoSql: Una nueva forma de base de datos – Parte II

Como hemos visto en el post anterior de NoSql (NoSql: Una nueva forma de base de datos – Parte I) tenemos grandes ventajas en el uso de este tipo de base de datos pero también tenemos grandes diferencias entre las distintas opciones que existen en el mercado actualmente.

La idea de este post es que podamos entender cuales son los tipos de base de datos NoSql, o sea cuales son las formas mas comunes de almacenamiento de la información y una breve introducción de las distintas opciones de este tipo de base de datos que son las que mas se utilizan actualmente.

Tipos de bases de datos NoSQL

Las bases de datos de tipo NoSql no tienen un estándar en cuanto a la forma de almacenar la información por este motivo cada una implementa una forma distinta. Veamos en detalle las formas mas comunes de almacenamiento:

Clave-valor

Este tipo de base de datos sin duda son las mas simples en cuanto a su uso debido a que guardan la información como si fuera un Hash donde la clave identifica un registro (el equivalente a un id en una base de datos relacional) y el valor es el dato que se guarda (este valor se guarda como un array de bytes también conocido en las bases de datos como BLOB).

noSql-HashTable

La forma de acceder a la información sera siempre buscando por medio de la clave, lo cual lo convierte en algo muy eficiente en cuanto a lo que es lecturas y escrituras. Ademas de esto nos permite escalar fácilmente a nivel horizontal, para ello podemos particionar la base de datos de acuerdo a los valores (por ejemplo los registros cuya clave sea de 1 a 1000 van en un server, del 1001 al 2000 en otro).

Este modelo es el que implementan entre otros RedisSimpleDBBerkeleyDBCassandra

Documental

Este tipo de base de datos almacena la información como un documento, el cual generalmente puede ser un simple JSON o un XML donde en general cada uno de esos documentos tiene un id o forma univoca de identificar a cada documento (esto no es necesariamente así pero la configuración por default hace esto). Ademas este tipo de base de datos nos permiten realizar consultas mas avanzadas sobre el documento, incluso por medio de ciertas consultas generar otro tipo de documento como salida de la misma.

noSql-Documental

Actualmente existen varios frameworks o librerías en Javascript que reciben este tipo de documento y sin ningún tipo de procesamiento pueden mostrar el contenido del mismo.

Este modelo es el que implementan entre otros MongoDB o CouchDB.

Grafos

En este otro tipo de base de datos NoSql, la información se representa como nodos de un grado y sus relaciones con las aristas del mismo permitiendo una navegación mucho mas eficiente que las base de datos relacionales.

noSql-Grafo

Con este tipo de modelo podemos darle no solo importancia a los datos sino también a la relación entre ellos. Además las relaciones pueden tener atributos por lo que se pueden realizar consultas.

Algo a tener en cuenta es que este modelo es solamente aprovechable cuando la información se puede representar en forma de una red (grafo), como puede ser el caso de las redes sociales.

Este modelo es el que implementan entre otros Neo4J, Hyperbase-DB 

Orientadas a objetos

Por ultimo en este tipo de base de datos, la información se representa por medio de objetos de la misma forma en que se representan en lenguajes de programación orientada a objetos como Java, C#.

Este modelo es el que implementan entre otros Db4oZope

Ejemplos de bases de datos NoSQL

En este apartado nos dedicaremos a explicar las características mas sobresalientes de algunas de las base de datos mencionadas en el post.

redis

 

 

 

 

  • Escrita en: C
  • Punto fuerte: Extremadamente rápido
  • Licencia: BSD
  • Protocol: Telnet-like
  • Se pueden almacenar los datos en disco para en caso de fallo tomar los datos desde allí.
  • El espacio que puede abarcar esta base de datos depende de la memoria RAM del equipo aunque también permite la bajada de la informacion a disco.
  • Tiene transacciones
  • Se puede configurar que ciertos valores tengan fecha de expiración (como podría ser una memoria cachè).
  • Posee replicación maestro-esclavo, en caso de falla del maestro toma el control un esclavo

Uso recomendado: Para cambiar rápidamente los datos de una base de datos.

Ejemplo: Estadísticas, comunicaciones y stock de productos en tiempo real.

Cassandra

  • Escrita en: Java
  • Punto fuerte: Guarda grandes volúmenes de información
  • Licencia: Apache
  • Protocolo: CQL3 y Thrift
  • Permite consultas por clave o rangos de claves.
  • Los datos pueden tener fecha de expiración (lo cual se especifica en el Insert).
  • Permite hacer un MapReduce con Hadoop
  • Todos los nodos son iguales a diferencia de Hadoop
  • Utiliza CQL3 para hacer las querys, el cual es muy similar a SQL pero con las limitaciones de no poder realizar join o agregaciones.
  • Las lecturas son mucho mas rápidas que las escrituras
  • Se pueden escribir triggers en Java

Uso recomendado: Cuando se necesita almacenar grandes volúmenes de datos pero con una interfaz amigable.

Ejemplo: Estadísticas acerca de sitios web (por hour, por browser, etc), logeo de transacciones realizadas.

MongoDB

  • Escrita en: C++
  • Punto fuerte: Conserva algunas propiedades de las base de datos relacionales (Query, index)
  • Licencia: AGPL (Drivers: Apache)
  • Protocolo: Custom binary (BSON)
  • Posee un sistema de replicación maestro/esclavo en donde cuando el nodo principal falla automáticamente otro toma el control.
  • Tiene la posibilidad de hacer sharding (particionamiento de los registros en distintos nodos)
  • Las consultas se realizan en Javascript.
  • Tiene la posibilidad de realizar querys de forma geoespacial (indicarle que nos traiga todos los puntos cercanos a uno que indiquemos).
  • Posee gran cantidad de cursos oficiales que se dictan de forma online en distintos lenguajes
  • Posee varias formas de realizar la replicacion (dos nodos pueden tener los mismos datos y otro puede realizar la replicacion con dos horas de diferencia).

Uso recomendado: Cuando tengas querys dinámicas y necesites una buena performance con grandes volúmenes de datos.

Ejemplo: Cualquier cosa que podrías hacer con una base de datos relacional pero donde tener una estructura rígida te detiene a realizar cambios de forma dinámica

neo4j

  • Escrita en: Java
  • Punto fuerte: Base de datos en forma de grafo, lo cual nos muestra como se conecta la información
  • Licencia: GPL
  • Protocolo: HTTP/REST
  • Independiente o integrable en aplicaciones Java
  • Tanto los nodos como las relaciones pueden contener información
  • Tiene transacciones
  • Indexa las claves y sus relaciones
  • La clusterizacion, replicacion y el backup de forma online tienen licencia comercial
  • Se encuentra optimizado para lecturas

Uso recomendado: Para información que se quiera representa en forma de grafos, información interconectada.

Ejemplo:  Para búsquedas de conocidos en redes sociales, topologias de red o mapas de caminos.

Conclusiones

Hemos visto a lo largo de este post que existen distintos tipos de base de datos y muchas implementaciones, la elección de una u otra depende de cual sea la que mejor se adecue a nuestras necesidades. La gran mayoría de estas base de datos cuentan con una gran comunidad activa por lo cual si tenemos algún problema seguramente encontraremos la solución en Internet.

No comments
TeraswapNoSql: Una nueva forma de base de datos – Parte II

Related Posts