Iniciación a Elasticsearch

Elasticsearch es un motor de búsqueda open source muy potente. También puede ser usado como base de datos aunque se debe tener en cuenta que no gestiona la inconsistencia de la información. Este sistema se basa en el almacenamiento de documentos en formato JSON y aunque le puedes definir una estructura a los mismos puede haber datos que no cumplan dicha estructura. Por tanto es importante saber gestionar valores null en el modelo de datos creado mediante este sistema.

Introducción a un modelo de datos estructurado con elasticsearch

Todos los modelos de datos deben estar estructurados, aunque sea mínimamente. Para ello elasticsearch ofrece “índices”, “types”, módulos y apis para gestionarlos.

Un type es la definición de la estructura de un grupo de documentos. Es muy similar a las tablas de las bases de datos.

Un índice es un nombre que hace referencia a un grupo de estructuras, los types. También puede ser visto como una base de datos.

Por cada índice se establece el número de shards principales que lo gestionan. Un shard es un sistema que maneja y almacena los documentos, se puede entender como un contenedor de datos. También se debe establecer el número de réplicas que tendrá (Por cada réplica se hace una copia del shard principal). Las mismas sirven para dar soporte a los shards principales cuando estos fallan y para temas de performance, dar mayor velocidad al sistema. Cuantos más shards principales se tengan más documentos se podrán almacenar, esto es debido a que un shard tiene un límite práctico de datos que puede almacenar. Para determinar el número de shards principales que necesita un índice se debe pensar en los siguiente: ¿cuantos ordenadores se necesitan para manejar la información del índice? el número de ordenadores es igual al número de shards que se necesitan (Normalmente con uno basta).

Los shards son gestionados por los nodos. Estos últimos son instancias de elasticsearch, es decir, un nodo es como un servicio de elasticsearch. En un servidor solo debería haber activo un nodo aunque se permite tener más para hacer testing. En la imagen se puede ver como se crea un segundo nodo en el mismo servidor a modo de pruebas para tener las réplicas de los shards principales.

Elasticsearch en pruebas

Todos los nodos tienen asignados un cluster. El mismo es un nombre que pertenece a una red de nodos. Un cluster tiene un nodo principal que se ocupa de mantener el estado global de los demás (Si este cae otro puede ocupar su lugar). En la siguiente imagen se puede ver un segundo servidor donde hay las réplicas de los shards principales.

Elasticsearch replicado en otro servidor

También hay los módulos de elasticsearch. Estos no dejan de ser software que gestiona tecnologías como puede ser otro software o el mismo hardware.

Por último hay las apis. Estas sirven para gestionar todo el modelo de datos. Cosas básicas que se pueden hacer con las apis:

  • Buscar, eliminar o modificar datos con el query dsl mediante la api de consultas.
  • Crear, modificar, leer o eliminar datos con la api de documentos.
  • Crear, modificar, leer, eliminar o monitorear índices y types con la api de índices.
  • Leer o modificar los settings del cluster con la api de cluster.

Conclusión sobre elasticsearch

Elasticsearch es un conjunto de módulos que gestionan tecnología. Como los mismos son gestionados por uno o varios servicios de elasticsearch y estos últimos pueden ser servidores independientes conectados por un cluster común, la escalabilidad de este sistema es prácticamente infinita (En la imagen se puede ver un sistema escalable). Todos los servidores tienen todos los módulos por tanto si cae uno, otro puede ocupar su lugar. Los datos son almacenados y gestionados por los shards y si cae un servidor con un shard principal una réplica lo puede sustituir. Esto junto a la rapidez de búsquedas complejas sobre una gran cantidad de datos hace de elasticsearch un motor de búsqueda muy bueno para cualquier empresa.

Elasticsearch escalable

NOTA DEL AUTOR: Tengo pensado hacer más post sobre elasticsearch. Me gustaría recibir comentarios sobre los temas más demandados: instalación, compatibilidad entre sistemas operativos, query dsl, geolocalización, funcionamiento de las apis, etc.