1. DESCRIPCIÓN DEL PROYECTO
2.3 Marco tecnológico
2.3.2 Bases de datos NoSQL
Desde los primeros años de utilización de sistemas de almacenamiento de datos, la necesidad ha sido creciente en diferentes aspectos, capacidad, rendimiento, seguridad, escalabilidad, por solo nombrar algunos, y en respuesta a estos requerimientos, han surgido diferentes maneras de satisfacerlos, desarrollando nuevas tecnologías ya sea de software o hardware.
Uno de los modelos más ampliamente usados ha sido el relacional, ya que reúne gran cantidad de características deseables en un sistema de base de datos, pero dado el enorme crecimiento y demanda a los sistemas informáticos que han considerado el surgimiento del internet, con la aparición de nuevos conceptos como por ejemplo las redes sociales y el Big Data, las empresas que trabajan en estos segmentos se han visto en la necesidad de encontrar nuevas maneras de satisfacer los requerimientos que implican estas nuevas tecnologías (McKnight, 2014).
Ya que los costos asociados a escalar el modelo relacional resultan muy elevados se recurren a tecnologías NoSQL lo que para algunos significa “Not Only SQL”, en donde las más comunes de ellas son (Zhu et al., 2014):
Bases de datos clave/valor. Bases de datos documentales. Base de datos columnar.
Base de datos orientada a grafos.
Una base de datos orientada a grafos se basa en la teoría de grafos la cual inició su estudio Leonhard Euler en el año de 1735 (Gross y Yellen, 2004). Aunque su aplicación inicial fue para resolver problemas de topología, se le han encontrado múltiples usos como por ejemplo el almacenamiento y gestión de datos (Zhu et al.,
2014). Hoy día la teoría de grafos es una ciencia del campo de la matemática y de la computación, que se encarga del estudio de las relaciones entre objetos, llamados nodos, tanto nodos como relaciones tienen propiedades que les
describen. Su base teórica establecida durante cientos de años de estudio, brinda la solidez para su aplicación en un sistema de almacenamiento (Coronel y Morris, 2016).
En este tipo de base de datos se hace especial énfasis en las relaciones entre los datos y su aplicación no se limita al manejo de grandes volúmenes de información, sino cuando la estructura de los datos puede ser modelada de manera natural como un grafo, lo que constituye uno de sus fuertes (McKnight, 2014). Dentro de las ventajas que esta orientación ofrece se encuentran el rendimiento, la flexibilidad, la agilidad y su diseño intuitivo para el almacenamiento (Robinson, Webber y Eifrem, 2015). Aunque su versatilidad le permite modelar casi cualquier tipo de datos, sus principales aplicaciones se encuentran en las redes sociales, análisis de rutas de viajes, tráfico financiero y de redes de transporte (McKnight, 2014).
La estructura básica de un grafo para el almacenamiento de datos consta de nodos y relaciones, cada uno de ellos puede tener etiquetas que indican el rol que desempeñan en su contexto y atributos de tipo clave valor que representan datos de interés para almacenar. Las relaciones siempre tienen una dirección, un tipo, un nodo inicial y final, por lo general las propiedades de las relaciones contienen información cuantitativa como pesos, costos, distancias, tiempo, entre otros. Las relaciones pueden ser recorridas sin importar la dirección que posean (Neo4j, 2016).
Figura 5 Grafo con propiedades y etiquetas
Grafo de 6 nodos con 3 etiquetas diferentes, 6 relaciones de 2 tipos diferentes, una de ellas contiene la propiedad de fecha en la que se realizó la relación. Recuperado de Beginning neo4j.com Labeled Property Graph Data Model Copyright © 2016 Neo Technology, Inc.
En la figura 5 se muestra un ejemplo de grafo que contiene información sobre libros, sus autores y compradores, las etiquetas de los nodos son Persona, Autor, y Libro, (los nodos pueden tener múltiples etiquetas) dentro de cada nodo se encuentran sus respectivos atributos de tipo clave-valor (nombre: Ian). Las relaciones en este caso son de 2 tipos, ‘Escribió’ y ‘Adquirió’ a diferencia de los
nodos, las relaciones poseen solo una etiqueta o tipo. En este caso en particular los atributos de las etiquetas de compra, almacenan la fecha en la que se realizó la transacción.
Neo4j
Neo4j es una base de datos NoSQL orientada a grafos multiplataforma, de código abierto implementada en Java y Scala. Su desarrollo comenzó en el 2003, cuando se utilizó como una base de datos para copias de seguridad y sistemas de gestión de contenido para el ejército sueco, sin embargo, años más tarde se separó cómo un producto de código abierto (Robinson, 2014). Cuenta con una amplia cantidad de colaboradores y desarrolladores, su código puede ser consultado a través de GitHub y la información sobre soporte oficial está disponible en Stack Overflow y el grupo de google de Neo4j (Neo4j, 2017).
Esta herramienta provee todas las características de una base de datos robusta, incluyendo el cumplimiento de transacciones ACID, siendo útil para almacenar estructuras datos mediante grafos en diferentes escenarios de producción, con la confiabilidad de una base de datos relacional y las ventajas de una NoSQL (Robinson, 2014), además cuenta con su propio lenguaje de consultas llamado Cypher, el cual es un lenguaje declarativo inspirado en SQL. Posee dos versiones,
community y enterprise, la diferencia principal radica en el soporte y ciertas características de rendimiento, seguridad y escalabilidad particulares.
Neo4j es usado hoy día por cientos de miles de empresas y organizaciones en casi todas las industrias, algunas de las más conocidas son: eBay, Walmart, Cisco y Hewlett Packard. Dentro de las aplicaciones más usadas se encuentran empresas del sector de manejo de redes, análisis de software, investigación científica, rutas de viaje, proyectos organizacionales, redes sociales entre otras (Neo4j, 2017).
InfiniteGraph
InfiniteGraph es una base de datos orientada a grafos implementada en Java y distribuida por la empresa Objectivity desde el año 2010. Fue diseñada para ofrecer soporte a organizaciones que requieran análisis de grandes cantidades de datos de manera rápida, para sectores empresariales, gubernamentales e investigativos. Está disponible para las plataformas MacOs, Linux y Windows, su licenciamiento es comercial y su valor generalmente depende del número de procesadores por servidor de base de datos (Mullins, 2015).
Dentro de las ventajas que ofrece esta base de datos se encuentran su alto rendimiento, bajos costos, fácil implementación para empresas y organizaciones de diferentes sectores del mercado y escalabilidad ilimitada con su arquitectura Cloud- Ready, prometiendo que sus usuarios no tendrán necesidad alguna de cambiar el back-end de su base de datos. Una de sus principales prioridades es ofrecer una herramienta de análisis de relaciones entre grandes cantidades de datos y facilidad
de uso para diferentes tipos de usuario, enfatizando en la mitigación de impactos negativos en sus productos a largo plazo (Jarrell, 2010).
Tiene una particularidad con la cual es posible personalizar el uso que se espera de la base de datos, desde un sistema de consistencia inmediata síncrona que soporte ACID hasta uno tipo BASE, de consistencia eventual asíncrona, dando la seguridad de que este último cuenta con un rendimiento y capacidad de distribución mucho mayor (Infinitegraph, 2017). Algunos de los principales usuarios de las bases de datos ofrecidas por Objectivity, incluyendo InfiniteGraph son: Ericsson, Siemens y los departamentos de defensa, inteligencia, marina y fuerza aérea de los estados unidos (Objectivity, 2017).
ArangoDB
ArangoDB es una base de datos NoSQL de código abierto, implementado en C++, multiplataforma, que reúne múltiples modelos de almacenamiento, como lo son: clave valor, documentos y grafos. El lanzamiento de su versión 1.0 se realizó en el verano del año 2012. Utiliza un lenguaje de consultas similar al SQL (AQL) o la posibilidad de usar para ello una extensión en lenguaje JavaScript, utiliza ACID en sus transacciones y ofrece una fácil escalabilidad tanto horizontal como vertical (ArangoDB, 2016; Schönert, 2012).
Dentro de las características más destacables se encuentran: la combinación del modelo de datos entre clave valor, documentos y grafos bajo un lenguaje común, la utilización de tecnologías tales como múltiples hilos de procesamiento y unidades de almacenamiento de estado sólido (SSD). Ofrece la posibilidad de elección entre mayor rendimiento o durabilidad, además para lograr mayor escalabilidad es compatible con el uso de sharding, que permite utilizar varias máquinas para ejecutar un clúster de instancias de ArangoDB que en conjunto constituyen una sola base de datos. En su última versión cuenta con un detector automático de bloqueos mutuos (Schönert, 2012).
ArangoDB cuenta con una licencia Apache V2, permitiendo al usuario uso libre para cualquier tipo de propósito bajo la única condición de que se especifique que se está haciendo uso de esta licencia. Cuenta con 3 tipos de subscripciones,
Community, Basic y Enterprise, las dos últimas son versiones comerciales que ofrecen mayores prestaciones relacionadas con el soporte a sus suscriptores (Arangodb, 2017). Su documentación se encuentra disponible en la red a través de su grupo de Google, GitHub y StackOverflow.
Las bases de datos orientadas a grafos (en particular Neo4j frente a MariaDB) han probado ofrecer mayores prestaciones que las de modelo relacional en conjuntos de datos que poseen estructuras genealógicas asociadas a pedigrí en factores como: eficiencia de almacenamiento, tiempo de respuesta en la obtención de datos y facilidad de expresión de las consultas (Kirby et al., 2014). Los datos a usar en este proyecto responden a una estructura de tipo árbol genealógico. Dadas
las ventajas encontradas al hacer uso de bases de datos NoSQL en particular orientadas a grafos en este tipo de estructuras, se opta por este modelo, ya que, al tratarse de un prototipo orientado a la web, la rápida capacidad de respuesta de cada uno de sus componentes se considera de suma importancia.