paint-brush
Compreendendo a reindexação do Elasticsearch: quando reindexar, práticas recomendadas e alternativaspor@rocksetcloud
3,664 leituras
3,664 leituras

Compreendendo a reindexação do Elasticsearch: quando reindexar, práticas recomendadas e alternativas

por Rockset9m2024/05/08
Read on Terminal Reader

Muito longo; Para ler

Quer você seja um usuário experiente do Elasticsearch ou esteja apenas começando sua jornada, compreender a reindexação é importante para manter um cluster Elasticsearch eficiente.
featured image - Compreendendo a reindexação do Elasticsearch: quando reindexar, práticas recomendadas e alternativas
Rockset HackerNoon profile picture
0-item


Elasticsearch é uma tecnologia popular para armazenamento e recuperação de dados eficiente e escalonável. No entanto, manter o desempenho e a integridade dos dados requer uma prática crucial chamada reindexação. A indexação é o processo inicial de adição de dados ao Elasticsearch, enquanto a reindexação é essencial para manter a precisão dos dados e otimizar o desempenho da pesquisa.


Quer você seja um usuário experiente do Elasticsearch ou esteja apenas começando sua jornada, compreender a reindexação é importante para manter um cluster Elasticsearch eficiente. Neste artigo, vamos nos aprofundar nos fundamentos da reindexação do Elasticsearch, respondendo quando for necessário, como acioná-la e as melhores práticas para aproveitar ao máximo seu cluster Elasticsearch.

Compreendendo a reindexação do Elasticsearch

No Elasticsearch, a reindexação ajuda a manter a integridade dos dados e aumentar o desempenho. Simplificando, é o processo de copiar dados de um índice para outro. Embora isso possa parecer simples, se não for feito corretamente, pode causar problemas como recuperação lenta de dados ou até mesmo resultados incorretos.


Imagine seus índices do Elasticsearch como bibliotecas bem organizadas. Com o tempo, os livros podem precisar ser atualizados, reorganizados ou até mesmo substituídos. Reindexar é semelhante a reorganizar as estantes da biblioteca ou atualizar os livros para manter tudo em ordem. Sem ele, sua biblioteca pode ficar desorganizada, levando a pesquisas mais lentas e possíveis imprecisões em seus dados.


Essa analogia ressalta a importância de compreender a reindexação no Elasticsearch. Não se trata apenas de copiar dados; trata-se de manter a integridade da sua "biblioteca" para pesquisa e recuperação eficientes. Vamos dar uma olhada em quando a reindexação é necessária e como mantê-la sob controle.

Quando a reindexação é necessária?

A reindexação se torna essencial quando ocorrem alterações em seus modelos de dados ou mapeamentos do Elasticsearch, ou quando você busca melhorias de desempenho. Nesta seção, examinaremos esses cenários com mais detalhes para entender as nuances em torno do motivo pelo qual a reindexação é necessária.

Mudanças estruturais em modelos de dados

Mudanças estruturais em modelos de dados referem-se a modificações na forma como os dados são estruturados no Elasticsearch. Essas alterações podem incluir coisas como adicionar ou remover novos campos ou alterar tipos de dados de campos existentes.


A introdução de novos campos geralmente requer uma reindexação para garantir que o Elasticsearch saiba como pesquisar com eficiência os dados armazenados nesse campo. A modificação dos tipos de dados requer um índice totalmente novo, pois você não pode alterar os tipos de dados no local. Depois que o novo mapeamento for criado para o tipo de dados modificado, os dados precisarão ser reindexados.


Essas mudanças estruturais exigem reindexação devido à abordagem de esquema na gravação do Elasticsearch. O Elasticsearch indexa os dados à medida que são ingeridos, e quaisquer alterações na estrutura de dados podem levar a inconsistências entre os dados existentes e os dados gravados com o novo esquema. Como resultado, sem a reindexação, as consultas de pesquisa podem produzir resultados inesperados ou imprecisos devido à incompatibilidade de esquema dos itens de dados. Isso pode ter um impacto na precisão dos dados e no desempenho da pesquisa.

Mapeando atualizações ou alterações

Os mapeamentos servem como modelo de como os dados são indexados e consultados no Elasticsearch. Quando esses mapeamentos são modificados, geralmente é necessária a reindexação.


Os mapeamentos definem os tipos de dados e propriedades dos campos no Elasticsearch. Qualquer alteração nesses mapeamentos afeta a forma como os dados são indexados, armazenados e recuperados. Por exemplo, alterar um campo de texto para um campo de data altera fundamentalmente a forma como os dados são processados e consultados. O Elasticsearch reforça a consistência dos dados com base nas definições de mapeamento. As alterações nos mapeamentos podem levar a inconsistências entre os dados existentes e o esquema atualizado se os dados não forem reindexados.


Quando os mapeamentos são modificados, especialmente se envolverem alteração de tipos de dados ou propriedades de campo, o preenchimento também se torna importante. O preenchimento é o processo de preencher ou atualizar retroativamente os dados existentes para alinhá-los com um novo esquema ou estrutura de dados. Isso significa que os dados existentes ainda podem ser consultados com eficiência e precisão após a alteração do mapeamento.

Melhorias de desempenho e otimizações de índice

A reindexação não é apenas uma tarefa de manutenção de rotina, é uma ferramenta poderosa para otimizar o desempenho da pesquisa no Elasticsearch. Por exemplo, a reindexação permite modificar o número de fragmentos em um índice. Ajustar a contagem de fragmentos, ou reestilhaçar, pode distribuir os dados de maneira mais uniforme, evitando cargas de trabalho desiguais em nós específicos para melhorar o desempenho da pesquisa.


A reindexação também pode ser usada para consolidar índices. Digamos que você tenha vários índices pequenos que compartilham a mesma estrutura de dados e são frequentemente consultados juntos. A reindexação pode consolidá-los em um índice único e maior. Isso reduz a sobrecarga de gerenciamento de vários índices pequenos que podem, por sua vez, aumentar a velocidade de pesquisa.


Finalmente, a reindexação pode ser usada para melhorar o roteamento. Ao reindexar e aplicar estratégias de roteamento de forma eficaz, você pode rotear consultas para fragmentos específicos, minimizando o número de fragmentos que precisam ser pesquisados. Essa abordagem direcionada pode acelerar significativamente as consultas de pesquisa se seus dados forem pesquisados com frequência por chaves específicas, como um ID de usuário.

Atualizando seu cluster

Ao atualizar do Elasticsearch versão 6.X para 8.0 (versão principal atual) e posteriores, pode ser necessário reindexar quaisquer índices que foram criados na versão 6. As estruturas de dados e os mecanismos subjacentes do Elasticsearch mudaram significativamente entre essas versões, exigindo reindexação para compatibilidade e desempenho ideal .


O processo de reindexação garante que os dados estejam alinhados com a estrutura atualizada e as novas funcionalidades para garantir que você possa migrar perfeitamente do antigo para o novo. Elasticsearch recomenda usar seu assistente de atualização para ajudar nesse processo.

Como desencadear uma operação de reindexação

A reindexação no Elasticsearch é possível por meio da API Elasticsearch Reindex. A API Reindex serve como ponte entre o índice existente e o novo índice que você deseja criar ou modificar. Seu objetivo principal é permitir a transferência eficiente de dados de um índice para outro. Além disso, você também pode:


  • Copie seletivamente documentos do índice de origem para o índice de destino.

  • Aplique transformações de dados complexas, como renomeação de campos ou conversões de tipo.

  • Filtre dados com base em critérios específicos.

  • Controle o processo de indexação com opções como limitação e intervalos de atualização.


Antes de usar a API Reindex, certifique-se de que o índice de destino, para onde você deseja mover ou transformar seus dados, esteja criado e configurado corretamente.


Para acionar a reindexação, você precisa formular uma solicitação POST para o endpoint _reindex , especificando os índices de origem e de destino, bem como quaisquer transformações ou filtros desejados. Um exemplo de solicitação POST de reindexação poderia ser o seguinte.


 POST /_reindex { "source": { "index": "source_index" }, "dest": { "index": "target_index" }, "script": { "source": "ctx._source.new_field = 'transformed value'" }, "query": { "term": { "category.keyword": "example" } } }


Depois que sua solicitação for criada, você poderá enviá-la ao Elasticsearch, iniciando o processo de reindexação. O Elasticsearch começará a copiar os dados do índice de origem para o índice de destino, seguindo as instruções definidas.


Assim que a reindexação for concluída, teste exaustivamente os dados no índice de destino para garantir que estejam alinhados com suas expectativas. Por exemplo, você pode comparar os mapeamentos de campos entre os índices de origem e de destino para confirmar se os campos foram mapeados corretamente durante a reindexação. Você também pode recuperar uma amostra de documentos dos índices de origem e de destino e compará-los para verificar se os dados foram reindexados com precisão.

Melhores práticas para reindexação

Ao reindexar no Elasticsearch, você deve seguir estas práticas recomendadas para garantir que o procedimento de reindexação seja tranquilo, sem perda de dados e com pouco impacto nas operações de cluster existentes.

Priorize o backup de dados

Antes de iniciar qualquer atividade de reindexação, é importante fazer backup do seu cluster. Esta medida de precaução funciona como uma rede de segurança, oferecendo uma forma de reverter ao estado original caso surjam problemas inesperados durante o processo de reindexação.


O índice de origem ainda deve existir após a reindexação; no entanto, é um princípio fundamental ter sempre uma cópia confiável dos seus dados antes de fazer alterações significativas.

Conduza primeiro a reindexação em um ambiente controlado

Para mitigar potenciais riscos e desafios durante a reindexação, é aconselhável realizar primeiro a operação num ambiente de pré-produção. Ao fazer isso, você pode identificar e resolver quaisquer problemas imprevistos sem afetar o sistema de produção. Depois que o procedimento for concluído e verificado no ambiente de pré-produção, ele poderá ser executado com segurança na produção.

Monitore o uso de recursos

É importante monitorar os recursos do sistema durante a reindexação para evitar sobrecarga na sua infraestrutura. A reindexação pode consumir muitos recursos, especialmente para conjuntos de dados maiores. Ficar de olho na CPU, na memória, no uso do disco e na atividade da rede pode ajudar a otimizar a alocação de recursos, garantindo que o processo seja executado com eficiência sem causar gargalos de desempenho. Para verificar o uso de recursos, você pode usar a API de estatísticas do nó.


GET /_nodes/stats


Isso retornará uma resposta parecida com a seguinte.


 { "_nodes": { "total": 2, "successful": 2, "failed": 0 }, "cluster_name": "my_cluster", "nodes": { "node_id1": { "name": "node_name1", "process": { "cpu": { "percent": 30, } }, "jvm": { "mem": { "heap_used_percent": 40.3, "heap_used_in_bytes": 123456789, "heap_max_in_bytes": 256000000 } } }, "node_id2": { "name": "node_name2", "process": { "cpu": { "percent": 50, } }, "jvm": { "mem": { "heap_used_percent": 60.8, "heap_used_in_bytes": 210987654, "heap_max_in_bytes": 256000000 } } } } }


Se você achar que a reindexação é muito intensa, você pode acelerar o processo definindo o parâmetro requests_per_second ao enviar a solicitação de reindexação. Isso adicionará uma suspensão entre lotes pelo número de segundos definido pelo parâmetro, para fornecer um período de espera entre lotes.

Verifique e valide os resultados

Assim que a reindexação for concluída, você deverá verificar os dados no índice de destino para garantir que tenham a aparência esperada. Este processo de validação deve abranger uma variedade de testes, incluindo contagens de documentos, mapeamentos de campos e consultas de pesquisa.

Soluções alternativas

O Elasticsearch sem dúvida se estabeleceu como uma solução proeminente no espaço de pesquisa e análise NoSQL. No entanto, vale a pena explorar soluções alternativas que ofereçam abordagens exclusivas para indexação e consulta de dados, especialmente uma como o Rockset.


Rockset é uma alternativa nativa da nuvem ao Elasticsearch e oferece uma perspectiva diferente sobre indexação e consulta de dados. Ao contrário da abordagem de esquema na gravação do Elasticsearch, o Rockset permite ingestão sem esquema. Os dados podem ser ingeridos e consultados sem a necessidade de definição inicial de esquema, oferecendo mais flexibilidade no tratamento de conjuntos de dados em constante evolução sem a necessidade de reindexação.


Na área de gerenciamento de índices, o Rockset se beneficia de seu modelo de indexação convergente, onde um índice de linha, um índice de coluna e um índice de pesquisa são criados automaticamente para os dados à medida que são ingeridos. Isso contrasta com o Elasticsearch, onde os índices são criados pelos usuários e as mudanças estruturais geralmente exigem procedimentos de reindexação demorados.


Embora o Elasticsearch continue sendo uma solução robusta para vários casos de uso, explorar alternativas como o Rockset pode ser útil, especialmente se você achar que a reindexação no Elasticsearch está se tornando uma atividade frequente.

Conclusão

A reindexação é um processo fundamental no Elasticsearch e é importante para manter a eficiência e a precisão dos resultados da pesquisa à medida que as estruturas de dados evoluem.


Se você achar que a reindexação está se tornando um fardo constante para sua equipe, pode valer a pena explorar soluções alternativas como o Rockset. Rockset oferece um processo de gerenciamento de índice mais simplificado que permite aos desenvolvedores se concentrarem em atividades de maior valor agregado.