Elasticsearch: uma Introdução à Base de Dados e ao Elastic Stack

Neste artigo, vou apresentar os conceitos básicos desta ferramenta criada em 2010 pela Elasticsearch N.V e poderás compreender porque esta ferramenta é considerada tão poderosa.

Se és um entusiasta de bases de dados não relacionais e tecnologia, provavelmente já ouviste falar do que é atualmente uma das bases de dados NoSQL mais populares: o Elasticsearch.


Antes de mais, quem pertence à família Elastic Stack?


O Elasticsearch é uma das tecnologias que pertencem à Elastic Stack, sendo elas: Kibana, Elasticsearch, Logstash e Beats.

img-2


Vamos brevemente explicar quem são os 3 irmãos do Elasticsearch:

  • Kibana: Uma ferramenta de visualização e gestão de dados para a Elasticsearch que fornece histogramas em tempo real, gráficos de linhas, pie charts e mapas. Uma utilização muito comum da Kibana é a análise e visualização de dados provenientes do Elasticsearch.
  • Logstash: Utilizada para agregar e processar dados e enviá-los para o Elasticsearch. É um pipeline de processamento de dados que recebe dados de todas as formas, tamanhos e de fontes infinitas de forma simultânea, e envia-os para o Elasticsearch para armazenamento.
  • Beats: Uma plataforma grátis e de código aberto que engloba uma coleção de agentes construídos propositadamente para ela. A Beats pode estar em múltiplas máquinas e sistemas, tanto em servidores como nos seus containers, adquirindo centenas ou milhares de dados, e alimentando-os ao ElasticSearch.


Mas, o que é o Elasticsearch?


Em poucas palavras, o Elasticsearch (aka ES) é um motor de pesquisa e análise distribuída que fornece pesquisa e análise, quase em tempo real, para todos os tipos de dados. Independentemente do tipo de dados com que trabalha, o Elasticsearch pode lidar com eles e assim ajudar às suas necessidades, uma vez que o ES suporta texto estruturado ou não estruturado, dados numéricos, ou pesquisa e análise de dados geoespaciais.

O Elasticsearch foi construído em Apache Lucene e desenvolvido em Java para ser – e seguramente é – uma ferramenta que fornece pesquisa e armazenamento de grandes volumes de dados de forma rápida e, conforme referido anteriormente (vale a pena mencionar isto novamente), quase em tempo real, executando pedidos em questão de milisegundos, o que é possível devido à arquitetura ES e ao facto de trabalhar a processar pedidos JSON com os métodos HTTP GET, POST e PUT e devolver os dados em formato JSON (que é um tipo de dados verdadeiramente leve).


Os componentes-chave da arquitetura Elasticsearch


A arquitetura do Elasticsearch é construída para ser horizontal e verticalmente escalável, rápida e flexível. Neste tópico, vou mostrar-vos os componentes fundamentais da arquitetura do ES: Cluster, Nodes, Shards, Réplicas e Analisadores.

img-4


Cluster


Um Cluster Elasticsearch é um grupo de uma ou mais instâncias de Nodes que armazenam dados e estão ligados. O objectivo do Cluster é distribuir, de forma lógica, todas as tarefas, indexação e pesquisa destes Nodes, e o melhor de tudo: pode executar tantos Clusters quantos quiser!


Node


Um Node pertence a um Cluster e é uma instância de um tipo de servidor que armazena os dados e executa a indexação desta informação. Por defeito, ao iniciar uma instância de Elasticsearch, um Node também começa a correr. Devido ao fato de o Node funcionar como uma instância, é também possível executar tantos Nodes quantos forem necessários. 

Há três opções principais durante a configuração de um Node ES: Node Mestre (controla o Cluster Elasticsearch), Node de Dados (contém dados), e Node de Cliente (serve como load balancer que encaminha os pedidos recebidos para muitos Nodes).


Shards


É possível dividir cada índice em pequenas peças chamadas Shards, que são criadas com a informação do índice subtraída e são totalmente funcionais e independentes para serem adicionadas ou não em algum Node. Para aceder a uma Shard específica, pode-se pesquisar pelo seu índice.

Esta abordagem é utilizada para evitar que o índice exceda os limites de armazenamento do servidor de armazenamento (o que é quase impossível) e para proteger o índice de possíveis falhas no hardware e, certamente, para aumentar o poder de consulta paralela.


Réplicas


Para além de dividir os índices em peças menores denominadas de Shards, o Elasticsearch também nos permite dividir estas Shards em fragmentos ainda mais pequenos denominados Réplicas.

Uma Shard tem tantas Réplicas quantas forem necessárias para satisfazer as necessidades do projeto! Importa referir que para além de aumentar o desempenho na pesquisa de dados, uma Réplica pode ser utilizada como um mecanismo de segurança para fins de backup e recuperação.


Analisadores


Não consegui encontrar uma melhor explicação do que é um Analisador do que esta referência tirada do website da Elasticsearch: “O parâmetro de análise especifica o Analisador utilizado para análise de texto ao indexar ou pesquisar um campo de texto”. E há vários tipos de Analisadores, cada um utilizado para cada finalidade, são eles: Standard, Simple, Whitespace, Stop, Keyword, Patter, Language, e Fingerprint, ou mesmo Analisadores personalizados para as tuas necessidades.


Documentos Elasticsearch


E por último, mas não menos importante, vamos falar sobre os Documentos Elasticsearch. Para compreender melhor o que é um documento, podemos compará-lo a uma linha numa base de dados relacional, mas o documento é armazenado num índice ES em formato JSON. 

Uma possibilidade que o ES lhe dá é que pode determinar o tipo de dados que serão armazenados no índice. Existem diferentes tipos, por exemplo, text, keyword, float, time, geo point, ou vários outros tipos de dados. Um documento é definido por chave e valor, a chave é o nome do campo, e o valor pode ser de diferentes tipos de dados, conforme descrito. 

img-6


Vejamos em cima esta imagem simples e interessante para comparar as terminologias Elasticsearch e SQL Database. É importante compreender o que cada comparação representa para compreender os campos reservados aos Documentos, também conhecidos como metadados, tais como: index, type e _id (o identificador único para o documento), conforme mostrado na imagem abaixo:

img-8


Elasticsearch: uma introdução à base de dados e ao que é o Elastic Stack – Considerações Finais


Como pudemos ver, o Elasticsearch é uma ferramenta poderosa para pesquisar e analisar diferentes tipos de dados, devido à sua arquitetura flexível e escalável. Visto que já tens o conhecimento do básico, gostaria de te convidar a subscrever a newsletter do KWAN, para que não percas o meu próximo artigo sobre este tema.

No próximo artigo, falarei sobre uma coisa que permite ao Elasticsearch ter tão boa reputação: Query DSL, a linguagem de query do ES.

Tenho a certeza que o vais achar o conteúdo muito útil!

Convido-te também a explorar outros artigos técnicos no blogue, por exemplo, os referentes a data science.