Skip to main content
Blog Jacagudelo Internet de las Cosas

Internet de las cosas IoT: Una oportunidad más para el Big Data

Es interesante el avance tan sorprender del campo del Internet de las Cosas en la actualidad, poder conectar cualquier dispositivo a internet es fascinante, pero dónde y cómo se almacenan los datos? Cómo se gestionan éstos datos?  Y Cómo podríamos aprovechar esta gran oportunidad en Big Data?

IoT + Big Data

Hace algunos años ni siquiera imaginábamos la posibilidad, por ejemplo, de que nuestro cepillo dental nos avise sobre la existencia de caries y que automáticamente nos solicite cita con el dentista, que nuestros cubiertos nos digan la velocidad en la que comemos para mejorar nuestra forma de comer o que incluso que nuestro inodoro analice nuestra orina y en base a los resultados diarios y periódicos nos recomiende la dieta más adecuada…así como las anteriores existen innumerables casos de aplicación del Internet de las Cosas o IoT de las cuales podemos sacar suficiente provecho, desde los desarrolladores hasta quienes gestionamos datos y por supuesto las industrias que quieran estar a la vanguardia.

No es de extrañar que nos llegue un correo electrónico periódico con el estado actual de nuestro coche o motocicleta antes de salir de casa con datos como el nivel de aceite, la iluminación, estado del motor,  de los frenos y demás, todo esto es posible gracias a la posibilidad de obtener distintos tipo de información, en distintos formatos y en grandes cantidades cada momento, eso es algo que no vemos a simple vista porque solo nos llega el resultado pero desde el punto de vista técnico existiría una gran relación entre IoT y el Big Data.

La idea de llegar al punto de conectar a internet cualquier dispositivo nos crea una gran oportunidad de crecimiento exponencial de datos, disponer con nuevos bancos de datos que acompañen las estadísticas convencionales conocidas de que hoy en día donde se generan por minuto 204 millones de emails, 1.8 millones de Likes y se suben alrededor de 200 mil fotos en Facebook y se envía 278 mil de Like en Twitter es algo por lo que necesariamente debemos estar preparados.

 Nuevos Bancos de Datos

Cada vez es más evidente el crecimiento abismal de los datos y hoy en día gracias al abanico de posibilidades que nos brinda el IoT incluso se podría triplicar en los próximos años.

Imaginemos que tenemos algunos electrodoméstico de nuestra casa conectados a internet como por ejemplo: Lámparas, Ventiladores, Aires Acondicionados, Nevera, Lava ropa y Lava Vajilla, cada uno con un dispositivo recolector de datos que captura distintos tipos y cantidades de datos a la vez, útiles para brindarnos análisis en tiempo real donde tendremos alertas de qué nos hace falta en la nevera y solicitar pedido automático al supermercado, programar remotamente la ejecución del lavarropa o incluso encender nuestro aire acondicionado y ambientar nuestra casa poco tiempo antes de que lleguemos.

Pero algo que debemos tener presente es que para que los datos lleguen a nuestras manos en las aplicaciones, los datos tuvieron que sufrir un proceso de tratamiento y normalización para llegar a la veracidad para que sean funcionales para nosotros, es aquí donde entra en juego la oportunidad para el Big Data.

internet-de-las-cosas
Interne tde las Cosas IoT, Fuente: consorcioaz.com

 Oportunidad Big Data

Una organización desea abrir un nuevo punto de venta pero desea elegir su mejor opción entre 3 lugares distintos, para tal efecto propone conocer de primera mano el flujo de personas que transitan por cada lugar en cada instante y por cada día de la semana. Para este caso se decide ubicar varios sensores de proximidad en cada uno de los lugares, transmitiendo vía WIFI mediante un API hacia los puntos de recepción de los datos en la central de la organización.

Dependiendo del flujo de personas podríamos recibir grandes cantidades de información a distintas horas del día, toda esta información vendría en formato predefinido por cada sensor que bien podría ser xml, JSON, Semi estructurado o incluso un formato propio por cada fabricante.

Almacenar  y tratar los datos generados aquí proporcionaría información valiosa donde se identificará la cantidad de personas por hora  y día en cada sitio elegido de manera que permita guiar a la organización a tomar su mejor decisión que en este caso sería abrir su punto de venta donde mejor le convenga.

Retos como el anterior donde existirá una creciente y constante fuente de transmisión de datos, es de suma importancia contar con soluciones que permitan extraer información valiosa de ello, esto lo podemos conseguir actualmente apoyándonos  con tecnologías como Hadoop que proporciona una gran cantidad de soluciones que se pueden adaptar a nuestras necesidades de procesamiento. Prácticamente podríamos tratar al IoT dentro del Big Data como una nueva fuente emergente de datos, la cual podríamos combinar fácilmente con set de datos Open Data que contengan información de Cajeros Automáticos en la zona para facilitar el retiro y pago pronto, vías de acceso más cercanas para identificar las horas pico o de tráfico lento para aprovechar y realizar publicidad en sitio o incluso las rutas de los distintos medios de transporte por cada lugar e identificar paradas cercanas.

Haz parte de mi Newsletter
Únete y haz parte como otros visitantes que reciben semanalmente mi newsletter con noticias y artículos actualizados sobre Business Intelligence y Big Data.
Al igual que tú, no tolero el SPAM. Tu dirección de email no será compartida.

 Retos IoT + BigData

Todo esto nos lleva a plantearnos algunos retos a cubrir con el manejo de la gran cantidad de datos generados por la nueva oleada del IoT, que como hemos visto en artículos anteriores son aquellos que por su composición y estructura debe cumplir todo proyecto de Big Data:

Recopilación de los datos:

Permitir incluir como nueva fuente de datos y combinar con datos existentes de manera que permita generar valor de mayor peso a la toma de decisiones.
En este caso poder combinar en una sola visualización los datos de cada sensor con datos de los asesores ventas que tienen segmentos de personas cerca a los lugares y con datos Open Data que permita dar una visión presente y a futuro en materia de movilidad por cada lugar, etc.

Almacenamiento de los datos:

Bien podríamos decidir hacer uso de las distintas bases NoSql, llevar nuestro proyecto a la nube o bien llegar al punto de almacenar los datos en bases relacionales.
Aquí recordamos el concepto poliglota, debemos ser capaces de poder almacenar toda esta combinación de datos y poder convertirlos en un solo repositorio de información.

Análisis y Visualización de los datos:

Permitir identificar visualizar la información al tiempo que permita crear patrones o tendencias sobre los datos recolectados, poder generar valor a partir de la gran masa de información generada adicional a la existente es uno de los principales retos.

Conclusión

Debemos prepararnos para la llegada de grandes bancos de información desde una nueva fuente llamada IoT, falta poco para que se haga masivo el uso de APIS y de datos Open Data en cualquier área de negocio y es ahí donde debemos estar preparados, capacitados y con el conocimiento necesario para sacar el máximo provecho a todos estos datos.

 

Consideras también que el IoT es una oportunidad para el Big Data? O por el contrario opinas que el IoT no se debe relacionar al Big Data?

Especialista en Business Intelligence con experiencia en herramientas como Pentaho, Microsoft y Microstrategy. Inmerso en Big Data, las Nuevas Tendencias, el Futbol y la Música.
BasesNoSQL_MongoDB

Bases de Datos NoSQL: MongoDB

Una vez decides emprender el camino del conocimiento de las Bases de Datos Big Data es necesario tener  presente que conceptualmente son diferentes a las bases de datos relacionales.  Entre ellas las bases de tipo documental como MongoDB que por su composición es una muy buena opción con la cual puedes empezar en este mundo, aunque veremos cambios conceptuales tendremos una visión clara de cómo nos podemos beneficiar de su uso.

Bases de Datos Documentales

Como hemos visto anteriormente, estas bases permiten almacenar estructuras de datos las cuales llamamos documentos que pueden ser de distintos tipos como XML, YAML y JSON principalmente, la gran ventaja es que los documentos no necesariamente deben seguir una misma estructura de manera que fácilmente podremos crear aplicaciones dinámicas y escalables.

Existen distintas bases de datos NoSQL documentales tales como: CouchDB, OrientDB, RavenDB, Terrastore, entre otras, hoy vamos a ver una base que goza de uan buena posición en el RankingDB  y desde que empezó a tenido un considerable crecimiento incluyendo una comunidad cada vez más grande, hablaremos de MongoDB.

¿Qué es MongoDB?

Es una base de datos NoSQL  cuya principal característica es almacenar la información en estructura documental más exactamente lo que conocemos como JSON (Java Script Object Notation), aunque internamente son almacenados en formato BSON (Que vendría siendo la representación binaria de cada documento).

La ventaja al almacenar los datos en formato documental es que gozamos de una ventaja muy interesante frente a las bases tradicionales y es precisamente disponer de un esquema dinámico, cómo así?… pues que no es necesario que todos los documentos almacenados tengan la misma estructura o el mismo esquema, veamos un ejemplo:

ejemplo-documentos-en-NoSQL
Ejemplo de documentos en base de datos NoSQL

En la anterior imagen podemos observar dos documentos con información de dos facturas y su respectivo detalle, como vemos ambos tienen internamente un array de documentos llamado “ítem”, el cual uno tiene dos objetos y el otro solo uno…de igual manera el primero tiene un array adicional de cadenas llamado “intereses” el cual no tiene el segundo.

Esta característica es muy interesante debido a que aparte de administrar y gestionar el espacio de almacenamiento en una sola operación podríamos obtener una gran cantidad de  información.

Nomenclatura RDBMS vs MongoDB

Veamos la nomenclatura de los distintos términos de los componentes de ambos tipos de bases:

Nomenclatura MongDB vs RDBMS
Nomenclatura MongDB vs RDBMS

Como podemos observar en la tabla anterior, ambos tipos de bases de datos manejan casi los mismos componentes..

Un aspecto muy importante a tener en cuenta es que los documentos no pueden exceder los 16 MB de tamaño, pero al mismo tiempo existe otra funcionalidad llamada GridFS cuya finalidad es extender dicha limitante para permitir almacenar documentos de GB o incluso TB (Podrías usar ésta opción en caso de que desees leer porciones de archivos de gran tamaño sin necesidad de tener que cargar todo su contenido en memoria).

Familiarizarnos con los términos no es tan complicado pues la lógica sigue la misma estructura que conocemos, por el contrario una de las principales diferencias y gracias a que MongoDB no soporta Joins debido a su estructura de datos desnormalizada, son los distintos metodos a tener presente en el modelado de datos los cuales veremos en el siguiente apartado.

Modelando datos en MongoDB

Como comenté anteriormente, debemos cambiar un poco nuestra lógica de modelado de datos…venimos de definir nuestros modelos de datos teniendo en mente siempre los requerimientos de la información solicitada y por supuesto las Formas de Normalización donde lo normal es llegar hasta la 3FN o incluso 4 y 5FN (Aunque existen muchos aspectos más pero viniendo al tema tratado resalto estas por el momento).

Debemos centrarnos en identificar el camino más corto para recuperar la mayor cantidad de información posible

Hasta aquí todos estamos familiarizados, por el contrario en MongoDB diseñamos nuestros modelos analizando y teniendo en mente el cómo vamos a recuperar la información, a que me refiero?…como observaste en la primer imagen (Ejemplo de documentos en base de datos NoSQL) podemos ver fácilmente que podemos almacenar distintos tipos de información en un solo documento, si lo llevamos a un modelo relacional fácilmente tendríamos las siguientes tablas: Factura, Detalle Factura , Cliente, Tipo de Pago, Intereses, Ítem y Tiempo.

Así mismo se debe tener presente como diseñar y elegir la estructura de los documentos, viendo la misma imagen podemos leer el contenido de dos maneras, puede ser tanto una colección de Clientes como de Facturas…pero el verdadero valor de ventaja estará representado en cómo necesitas obtener los datos.


Supongamos que es una colección de Clientes, si consultamos constantemente solo información del cliente pero muy de vez en cuando sus facturas, estaríamos desperdiciando memoria y procesamiento de la base pues debemos realizar un trabajo extra para extraer una cantidad de información innecesaria. Por el contrario si lo que necesitamos es consultar constantemente las Facturas realizadas, la información del Cliente y el detalle de lo facturado, sería una ventaja tener todo en un mismo documento pues con una sola consulta estamos obteniendo toda la información deseada.

Por supuesto cabe anotar que debes tener presente el crecimiento de los datos a futuro, por eso es importante saber que se quiere como finalidad del proyecto para así poder realizar un buen modelado de datos.

Veamos los distintos tipos de modelado de datos que podemos encontrar.

· Modelado Uno a Uno

En este modelado la finalidad es embeber datos altamente relacionados dentro de una misma estructura o documento, facilmente podemos incrustar o embeber documentos dentro de otros documentos. Al tener este tipo de modelo de datos desnormalizados nos permite recuperar y manipular los datos rapidamente.

Modelado Uno a Uno MongoDB
Modelado Uno a Uno MongoDB

· Modelado Uno a Muchos

En este modelado la finalidad es identificar aquellos datos mucho más descriptivos relacionados entre sí y almacenarlos en una misma estructura, regularmente se identifican con arrays de distintos tipos como: documentos, cadenas, números y podrían representar por ejemplos datos como listas de direcciones, de libros, varias etiquetas, números telefónicos, amigos, colores favoritos, etc.

Modelado Uno a Muchos MongoDB
Modelado Uno a Muchos MongoDB

· Modelado Uno a Muchos con Referencias

Debido que no se soportan Joins por mantener un esquema desnormalizado, posee una funcionalidad que permite almacenar información relacionada en documentos separados dentro de una misma base de datos como en distintas bases de datos, lo que conocemos como un link en Oracle.

De igual manera existen dos opciones:

-Referencia Manuales

Usada principalmente para relacionar documentos entre dos colecciones.


> db.albums_friends.findOne()
{
"_id" : 1,
"height" : 480,
"width" : 640,
"tags" : [
"cats",
"sunrises",
"kittens",
"travel",
"vacation",
"work"
]
}

> db.images.findOne()
{
"albums_friends_id" : 1,
"images" : [
2433,
2753,
2983,
6510,
11375,
12974,
15344,
16952,
19722,
23077,
24772,

]
}

-DBRefs

Esta opción nos permite referenciar documentos de múltiples colecciones, la ventaja es que en éste caso también  podemos indicar tanto la colección como la Database donde se encuentran.

> db.images.findOne()
{
        "albums_friends_reference" : {
                  "$ref" : "albums_friends",
                  "$id" : 1,
                  "$db" : "albums"
               },
        "images" : [
                2433,
                2753,
                2983,
                6510,
                11375,
                12974,
                15344,
                16952,
                19722,
                23077,
                24772,
                
        ]
}
Haz parte de mi Newsletter
Únete y haz parte como otros visitantes que reciben semanalmente mi newsletter con noticias y artículos actualizados sobre Business Intelligence y Big Data.
Al igual que tú, no tolero el SPAM. Tu dirección de email no será compartida.

Como nos ayuda en Big Data?

Como vimos en el artículo de introducción al Big Data es necesario que se cumplan ciertas características:

· Alta Disponibilidad

Gracias a su funcionalidad Replica Set, podemos almacenar nuestra información en más de un servidor a la vez de manera que nunca se pierda disponibilidad si alguno llega a fallar y al mismo tiempo brinda durabilidad.

· Escalabilidad Horizontal

Sharding permite particionar nuestros datos a través de un Cluster de servidores permitiendo dividir nuestras cargas de disponibilidad, escalando fácilmente y de manera inmediata.

· Atomicidad

Una gran ventaja al no disponer de transacciones, es que las operaciones se realizan de manera atómica, lo que quiere decir que si insertamos un dato una vez el servidor confirme la operación éste permanecerá hasta que se modifique o elimine…funcionando de igual manera para todas las operaciones, con esto garantizamos consistencia en los datos.

· Almacenamiento de grandes bancos de información

La combinación de las funcionalidades anteriores hacen de ésta base de datos NoSQL una buena opción siempre que aplique y dé solución a nuestros requerimientos, un buen diseño nos brindara una solución altamente escalable y disponible.

· Schemaless

Como vimos en el apartado anterior, nos permite definir la estructura de los datos que vamos a almacenar según sea el requerimiento, esto no quiere decir que no debamos controlar tanto el desarrollo de nuestra aplicación como el de nuestra base….por el contrario es necesario definir bien nuestros modelos de datos pues a futuro puede impactar enormemente en el rendimiento y el crecimiento de la misma.

Recursos

Si esta introducción a MongoDB te ha gustado, de seguro estarás interesado en profundizar los distintos temas tratados y en aprender mucho más. Gracias a su gran acogida y al crecimiento exponencial de uso de la misma, han creado una serie de recursos gratuitos de los cuales puedes sacar bastante provecho, yo por mi parte he tomado todo lo que voy a referenciarte y aunque la mayoría es en ingles también hay material en español así que te invito a que profundices!

· Mongo University

Es un espacio donde los mismos desarrolladores y profesionales la base de datos comparten su conocimiento al público, existen cursos de distintos niveles y perfiles. Lo increíble es que puedes tomar los cursos que desees y además te obsequian un certificado que puedes colocar en tu perfil de Linkedin, puedes ver en mi perfil en la sección de Certificaciones como lucen.

MongoDB University

· Mongo Webinars

Tiene la misma finalidad que el anterior pero la diferencia es que es en vivo y en formato webinar, donde además de interactuar con un experto también lo haces con profesionales interesados en el tema, existen secciones en español pero debes estar pendiente…puedes registrarte al instante.

MongoDB Webinars

· Mongo MUG

Haz escuchado de la aplicación Meetup? Pues esta aplicación funciona como una red social que permite a sus usuarios realizar reuniones en la vida real. Actualmente existen más de 100 grupos alrededor del mundo, puedes elegir el más cercano y prepararte para la próxima reunión!

MongoDB User Group

· Mongo Community

Por supuesto también puedes encontrar absolutamente todo lo relacionado con MongoDB en la siguiente dirección

MongoDB Community

· Mongo Blog

Posiblemente uno de los recursos principales, además de contar con información sobre los avances de las versiones y sus mejoras también encontrarás artículos prácticos donde aprenderás muchísimo.

MongoDB Blog

 

Espero que te haya gustado el artículo, te motive a leer y aprender un poco más de esta increíble base de datos NoSQL. Te informo que en los siguientes artículos profundizare sobre el almacenamiento, manipulación de documentos, explicaré como configurar ReplicaSet, Sharding…nos veremos pronto!



¿Qué opinas de MongoDB ? Te parece interesante y te gustaría probarla? Tienes alguna idea en la que creas que puedes utilizarla?

Especialista en Business Intelligence con experiencia en herramientas como Pentaho, Microsoft y Microstrategy. Inmerso en Big Data, las Nuevas Tendencias, el Futbol y la Música.
Titulo Teorema CAP

Teorema CAP: Explicación Teórica y Práctica

Muchos de nosotros estamos interesados por el Big Data,  pero  es necesario conocer un poco más a fondo aspectos teóricos para poder elegir la base de datos NoSql que mejor se adapta a nuestro proyecto, eso lo proporciona en gran medida el Teorema CAP.

Como lo vimos en el anterior post, existen muchas bases de datos NoSQl, que a su vez nos proveen distintas ventajas necesarias para implementar soluciones altamente distribuidas y escalables, las cuales dentro de sus características principales se encuentra el cumplimiento del Teorema CAP, el cual representa dentro del diseño de nuestra implementación un reto para definir que es lo más importante, si la Consistencia o la Disponibilidad.

 

 

Teorema CAP

El Teorema CAP aplica en ambientes altamente distribuidos, el primero en referenciarlo fue el profesor Eric A. Brewer,  quien en el año 2000 en un simposio del ACM  sobre los principios de la computación distribuida (PODC)…explicó que cuando se trata de diseño y despliegue de aplicaciones en entornos distribuidos solo podremos garantizar 2 de los siguientes 3 requerimientos:

The three requirements are: Consistency, Availability and Partition Tolerance, giving Brewer’s Theorem its other name – CAP

2 años más tarde, fue comprobado y convertido en teorema, por lo cual, veamos a fondo cada uno de los requerimientos anteriormente mencionados:

Consistency (Consistencia)

Todos los nodos deben garantizar la misma información al mismo tiempo, si insertamos datos (todos los nodos deben insertar los mismos datos), si actualizamos datos (todos los nodos deben aplicar la misma actualización a todos los datos) y si consultamos  datos (todos los nodos deben devolver los mismos datos).

Para tal efecto la comunicación entre los nodos debe ser de suma importancia, podríamos por ejemplo, emitir confirmación de inserción de un dato, una vez dicho dato se grabo en todos los nodos de nuestra réplica.

Availability (Disponibilidad)

Independientemente si uno de los nodos se ha caído o a dejado de emitir respuestas, el sistema debe seguir en funcionamiento y aceptar peticiones tanto de escritura como de lectura.

Una vez se pierde comunicación con un nodo, el sistema automáticamente debe tener la capacidad de seguir operando mientras éste se restablece y una vez lo hace, se debe sincronizar con los demás.

Partition Tolerance (Tolerancia al Particionado de Red)

El sistema debe estar disponible así existan problemas de comunicación entre los nodos, cortes de red que dificulten su comunicación o cualquier otro aspecto que genere su particionamiento.

Por lo general los ambientes distribuidos están divididos geográficamente, donde es normal que existan cortes de comunicación entre algunos nodos, por lo cual, el sistema debe permitir seguir funcionado aunque existan fallas que dividan el sistema.

 

A partir de lo anterior y dependiendo de lo definido en el proyecto, solo podemos garantizar 2 de los 3 aspectos mencionados anteriores. Siendo la disponibilidad desde mi punto de vista uno de los principales aspectos a tener en cuenta…pues debemos ser conscientes que en estos momentos son cada vez más impacientes nuestros clientes y menos susceptibles a esperar el restablecimiento del servicio (Aunque muchas veces se resuelvan los problemas en cuestión de segundos).

Veamos ahora los posibles escenarios o combinaciones permitidas para cumplir lo anterior.

 

Cuál escenario elegir?

Para tal efecto veamos un ejemplo: Supongamos que nuestra organización se dedica a la distribución de productos de aseo, somos una organización líder en el mercado y constantemente recibimos pedidos de todo tipo de sectores y todo tipo de cliente en nuestro país. Demandamos tantos pedidos que decidimos dividir y sectorizar nuestro país en 4 grandes Clúster principales y cada uno cuenta con 4 nodos en réplica, quienes se encargaran de tomar los pedidos y dar respuestas internas y externas.

Uno de nuestros clientes desea realizar un pedido por una cuantiosa suma de dinero, aportando un gran ingreso en el Sector A, pero uno de los nodos de la réplica del Sector A ha perdido comunicación con los demás…

Ahora veamos cómo aplicar nuestro ejemplo a cada posible escenario entregado por el Teorema:

 

1. CP (Consistency – Partition Tolerance)

El sistema siempre garantizará Consistencia aunque existan problemas de conexión entre los nodos (Particiones de red) y no se asegura Disponibilidad.

Teorema CAP - CP
Teorema CAP – Consistency, Partition Tolerance

Como toleramos particiones de red, nuestro sistema recibe la petición, pero como además priorizamos consistencia, es necesario que el pedido se aplique y confirme en todos los nodos, como uno de ellos no está disponible…el pedido no se puede realizar.

 

2. AP (Availability – Partition Tolerance)

 El sistema siempre estará Disponible aunque existan problemas de conexión entre los nodos (Particiones de red). Aunque pueda mostrar datos temporalmente Inconsistentes.

Teorema CAP - AP
Teorema CAP – Availability, Partition Tolerance

Siguiendo con el ejemplo, aquí toleramos particiones de red igualmente por lo cual el sistema recibe y aplica la petición, como no garantizamos consistencia, no es necesario que se confirme el pedido en todos los nodos.

 

3. CA (Consistency – Availability)

El sistema siempre estará Disponible con información Consistente. Por lo cual el sistema no soporta perdida de comunicación entre los nodos (Particiones de red).

Teorema CAP - CA
Teorema CAP – Consistency, Availability

En este caso como no soportamos particionamiento, el sistema debería fallar y presentar un mensaje a nuestro cliente de “Inténtalo más tarde por favor”, puesto que prácticamente no estaríamos garantizando ningún tipo de consistencia.

Si por el contrario no existiera particionamiento, aplicaríamos todas las peticiones y garantizábamos consistencia confirmando cada petición en todas las réplicas, debido a que estamos en un ambiente distribuido es poco probable que se dé el escenario ideal donde nunca se creen particiones de red.

Igualmente vemos con lo anterior que es necesario priorizar en la disponibilidad, personalmente no utilizaría el escenario CA pues prácticamente quedaríamos fuera de servicio total, lo que causaría miles de llamadas para reportar errores, quejas o incluso perdidas de clientes.

Haz parte de mi Newsletter
Únete y haz parte como otros visitantes que reciben semanalmente mi newsletter con noticias y artículos actualizados sobre Business Intelligence y Big Data.
Al igual que tú, no tolero el SPAM. Tu dirección de email no será compartida.

Como acabamos de ver, es sumamente importante definir desde el principio como desea disponer de la información el cliente, en algunos casos podríamos combinar distintas bases NoSQL que nos permita cubrir ciertas necesidades presentadas anteriormente, todo es un juego de análisis y dimensionalidad de nuestro proyecto, para tal efecto y mayor guía, veamos una clasificación de las distintas Bases de datos, donde claramente veras como una buena elección y combinación de bases te puede ser de gran ayuda.

CAP-NoSQLDB

 

Que te pareció el Teorema CAP? Que piensas respecto a la teoría y a la práctica del teorema? Alguna experimentaste la necesidad de elegir alguna opción del Teorema CAP?

 

Especialista en Business Intelligence con experiencia en herramientas como Pentaho, Microsoft y Microstrategy. Inmerso en Big Data, las Nuevas Tendencias, el Futbol y la Música.
Bases-NoSQL-BigData

Bases de Datos NoSQL: Especiales para Big Data

Hoy en día nos enfrentamos a un gran cambio de paradigma en cuanto a almacenamiento y procesamiento de datos se trata, gracias a la evolución de grandes compañías como Google, Amazon, Linkedin, Facebook y muchas más, han salido a luz una seria de soluciones en modalidad Opens Source que nos benefician en gran medida.

Las Bases de Datos NoSQL tienen como principal característica que solucionan los principales problemas que presentábamos en la actualidad:

Escalamiento horizontal: Ya no necesitamos depender de un proveedor de hardware para potenciar nuestras soluciones.
Disponibilidad de los datos: Podemos distribuir en cuanto equipo y capacidad económico dispongamos si necesidad de que sean robustos.
Solución a fallas o cortes de red: Disponemos de un ecosistema interconectado el cual siempre en gran medida vamos a tener disponibilidad de los datos.

Actualmente contamos con una tecnología que mezcla una seria de características que nos ayudan en cierta parte a cubrir los aspectos anteriormente expresados, tal como lo dije, éste cambio de paradigma nos permite entre otras cosas almacenar y tratar grandes bancos de información, tener información disponible, información incluso definida geográficamente y tolerar errores por falta de conexión…éstas soluciones las conocemos como Bases de Datos NoSQL.

Un poco de historia…

El término NoSQL en cierta forma se referenció hace un buen tiempo. Inicialmente fue usado a finales de los 90’s cuando Carlo Strozzi desarrolló su propio SGBD el cual no usaba SQL, ésta base de datos almacenaba sus tablas dentro de archivos ASCCI donde cada tupla de valor era representada por un fila de campos separados por Tabs, debido a que no usaba SQL para consultar los datos, básicamente ejecutaba Scripts sobre el Shell de UNIX.
Luego con el inminente éxito Google en el 2003 se dio a luz el primer proyecto de bases de datos NoSQL llamado BigTable y un poco después apareció Marklogic para el 2005, por supuesto todo esto debido a la necesidad de cubrir ciertas limitaciones que encontraban en sus sistemas SGDB tradicionales, las cuales debido al crecimiento de usuarios, de datos y procesamiento cada vez mayor y de peticiones en tiempo real, debían buscar otras alternativas de almacenamiento y disponiblidad de datos.

A partir de éste momento distintas organizaciones consolidadas como Linkedin, Facebook, Last.fm, Powerset, Couch.io hicieron lo mismo y presentaron sus proyectos en un distintivo meetup de San Francisco en Junio del 2009 presentado por Johan Oskarsson donde explicaban y debatían ciertos aspectos sobre estas nuevas bases de datos.

Entrando en materia

Ya teniendo claro de donde provienen estas fascinantes bases de datos, vamos a verlas un poco más a fondo.
Las bases de datos NoSQL tienen como principal característica la no utilizan del lenguaje de consulta SQL, conocido por todos nosotros, pues al proveer un ambiente altamente distribuido  sería muy complicado realizar algún tipo de Join o consulta entre todos los servidores de un Cluster. También están diseñadas para permitir almacenar y gestionar grandes bancos de información…por ejemplo, Facebook hasta hace un año atras almacenaba, consultaba y analizaba más de 30 Petabytes de datos generados por los usuarios!!!

Existen distintos tipos de bases de datos y cada una nos permite solucionar distintos problemas debido a su enfoque particular.
Al existir distintos tipos de bases NoSQL, podremos obtener la capacidad de utilizar distintas tecnologías dentro de un mismo ambiente, cada una colaborando en un aspecto y funcionalidad puntual, esto se conoce como Persistencia Poliglota.

Características

Dentro de las principales características podemos encontrar:

  • No usan SQL como lenguaje de consulta estándar
  • La información almacenada no requiere un formato o esquema definido (Schemalees)
  • Permiten escalabilidad horizontal
  • No garantizan ACID, esto para mejorar el rendimiento y disponibilidad
  • Presentan operaciones atómicas
  • Permiten replicación y distribución
  • Almacenamiento de grandes bancos de información
  • Solo pueden cumplir 2 de las tres caracteristicas del teorema CAP: Tolerancia, Disponibilida y Tolerancia a Fallos o Particionamiento de Red

Tipos de NoSQL

Aunque a partir de los últimos años se han venido creando distintos tipos de bases datos, presentaré las más utilizadas. Es necesario aclarar y recordar que es importante analizar si verdaderamente es necesario aplicar cualquiera de estas bases para solución de nuestros problemas, pues debemos dedicar tiempo a investigación o incluso dinero si deseas tercerizar el desarrollo.

1. Documentales

Como su nombre lo indica, en ellas podemos almacenar datos de tipo documento, los cuales pueden ser de tipo XML, JSON o BSON principalmente. Como indiqué anteriormente, no es necesario seguir una estructura definida para cada documento, lo cual brinda inmensa versatilidad. Son muy comunes y se acoplan muy bien a soluciones donde deseamos extender.

A continuación veamos la comparación de dos documentos:

base de datos NoSQL Documental
Ejemplo de base de datos NoSQL Documental

Algunas de las bases de datos más populares de éste tipo son:

MongoDB, CouchDB, OrientDB, RavenDB

2. Familia de Columnas o Columnares

Almacenan los datos cambiando nuestra lógica transaccional de filas a columnas. Tienen como característica principal que dentro de una fila podemos encontrar distintas columnas relacionadas a un Key y a su vez cada columna contiene un par (Key-Value) que hace referencia al campo y su valor. La ventaja que presenta es que no es necesario que todas las filas tengan las mismas columnas ni la misma cantidad de columnas, permitiendo adicionar columnas a cualquier fila y en cualquier momento.

Veamos una imagen como referencia:

bases de datos NoSQL ColumnFamily
Ejemplo de bases de datos NoSQL Column Family

Algunas de las bases de datos más populares de éste tipo son:

Cassandra (Facebook), HBase (Twitter), Hypertable, Amazon SimpleDB

3. Llave-Valor (Key-Value)

Este tipo de bases podríamos decir que son las más simples, en ellas podemos almacenar por cada registro una tupla de Key-Value. Para obtener los valores simplemente consultamos por el Key y por supuesto es necesario definir una Key que defina nuestra estructura lo mejor posible, entre tanto podemos encontrar tipo de valores como: Listas, String, Arrays, Arrays ordenados, Hash con los cuales podríamos relacionar otros campos, Arrays de bits. Variando de producto en producto.

Veamos una representación:

bases de datos NoSQL Key Value
Ejemplo de bases de datos NoSQL Key-Value

Algunas de las bases de datos más populares de éste tipo son:

Redis, Riak, Voldemort (LinkedIn), Amazon DynamoDB, Berkeley DB

4. Grafos

Estas bases de datos particularmente nos ayudan a almacenar datos relacionados bajo muchos niveles, imaginémonos representaciones de amigos de mis amigos o productos que relaciones a distintos clientes de distintas nacionalidades. Al ser de tipo grafo, tenemos dos elementos distintivos: Los Nodos, cuya finalidad es representar las entidades (Personas, Productos) con sus respectivas propiedades (Cuit,Nombre) y las Relaciones o Aristas, cuya finalidad será representar tanto el tipo como la dirección de nuestra relación (Gustos, Si amigo o no, Ubicación) con sus respectivas propiedades. También podemos hacer consultas transversales de modo que podemos ampliando el rango de resultados.

Veamos una representación:

bases de datos NoSQL Grafos
Ejemplo bases de datos NoSQL Grafos en . Fuente: cmaps

Algunas de las bases de datos más populares de éste tipo son:

Neo4J (eBay), Inifinite Graph, FlockDB

Haz parte de mi Newsletter
Únete y haz parte como otros visitantes que reciben semanalmente mi newsletter con noticias y artículos actualizados sobre Business Intelligence y Big Data.
Al igual que tú, no tolero el SPAM. Tu dirección de email no será compartida.

Algunas veces podemos encontrar que alguna base de datos entra en más de una clasificación, esto debido a que sus características le permiten adaptarse a distintas aplicaciones y soluciones.

Como podemos ver, tenemos un gran abanico de soluciones capaces de brindarnos distintas capacidades para potenciar nuestras plataformas BI Tradicionales o para empezar nuestros proyectos de Big Data. Debemos analizar sus funcionales y nuestro problema a raíz de poder cubrir nuestras necesidades.

 

Habías escuchado alguna de las bases de datos NoSQL mostradas anteriormente? Cuál de éstos tipos te parece más interesante? Cómo podrías usarlas? Haz usado alguna de las anteriores?

 

Especialista en Business Intelligence con experiencia en herramientas como Pentaho, Microsoft y Microstrategy. Inmerso en Big Data, las Nuevas Tendencias, el Futbol y la Música.