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.
O Elasticsearch é uma das tecnologias que pertencem à Elastic Stack, sendo elas: Kibana, Elasticsearch, Logstash e Beats.
Vamos brevemente explicar quem são os 3 irmãos do 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).
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.
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!
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).
É 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.
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.
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.
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.
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:
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.