Usando o Elasticsearch para descarregar pesquisas e análises do DynamoDB


Análise no DynamoDB

As equipes de engenharia geralmente precisam executar filtros complexos, agregações e pesquisas de texto em dados do DynamoDB. No entanto, o DynamoDB é um banco de dados operacional otimizado para processamento de transações e não para análises em tempo actual. Como resultado, muitas equipes de engenharia atingiram limites nas análises no DynamoDB e buscaram opções alternativas.

Isso ocorre porque as cargas de trabalho operacionais têm padrões de acesso muito diferentes das cargas de trabalho analíticas complexas. O DynamoDB oferece suporte apenas a um conjunto limitado de operações, tornando a análise desafiadora e, em algumas situações, impossível. Até AWSa empresa por trás do DynamoDB, aconselha as empresas a considerarem transferir análises para outras soluções específicas. Uma solução comumente referenciada é o Elasticsearch, na qual iremos nos aprofundar hoje.

DynamoDB é um dos bancos de dados NoSQL mais populares e é usado por muitas empresas de escala internet em jogos, mídias sociais, IoT e serviços financeiros. O DynamoDB é o banco de dados preferido por sua escalabilidade e simplicidade, permitindo desempenho de milissegundos de um dígito em escalas de 20 milhões de solicitações por segundo. Para atingir essa velocidade em escala, o DynamoDB está focado em atingir o desempenho para cargas de trabalho operacionais – operações de alta frequência e baixa latência em registros individuais de dados.

Elasticsearch é um mecanismo de pesquisa distribuído de código aberto desenvolvido em Lucene e usado para casos de uso de pesquisa de texto e análise de log. Elasticsearch faz parte da pilha ELK maior que inclui Kibana, uma ferramenta de visualização para painéis analíticos. Embora o Elasticsearch seja conhecido por ser flexível e altamente personalizável, é um sistema distribuído complexo que requer operações e gerenciamento de cluster e índice para manter o desempenho. Existem ofertas gerenciadas do Elasticsearch disponíveis na Elastic e na AWS, portanto, você não precisa executá-lo sozinho em instâncias do EC2.

Plugue sem vergonha: Conjunto de foguetes é um banco de dados analítico em tempo actual criado para a nuvem. Ele tem um conector integrado para DynamoDB e ingere e indexa dados para pesquisas, agregações e junções em menos de um segundo. Mas este put up é para destacar casos de uso de DynamoDB e Elasticsearch, caso você queira explorar essa opção.

Conectando DynamoDB ao Elasticsearch usando AWS Lambda

Você pode usar o AWS Lambda para carregar continuamente dados do DynamoDB no Elasticsearch para análise. Veja como funciona:

  • Crie uma função lambda para sincronizar todas as atualizações de um Fluxo do DynamoDB no Elasticsearch
  • Crie uma função lambda para obter um snapshot da tabela existente do DynamoDB e enviá-lo ao Elasticsearch. Você pode usar um Roteiro EC2 ou um Fluxo do Amazon Kinesis para ler o conteúdo da tabela do DynamoDB.


Usando o Elasticsearch para descarregar pesquisas e análises do DynamoDB

Existe uma abordagem alternativa para sincronizar dados com o Elasticsearch envolvendo o Plug-in Logstash para DynamoDB, mas atualmente não é compatível e pode ser complexo de configurar.

Pesquisa de texto em dados do DynamoDB usando Elasticsearch

A pesquisa de texto é a pesquisa de texto dentro de um documento para encontrar os resultados mais relevantes. Muitas vezes, você desejará pesquisar parte de uma palavra, um sinônimo ou antônimos de palavras ou uma sequência de palavras juntas para encontrar o melhor resultado. Alguns aplicativos até ponderam os termos de pesquisa de maneira diferente com base em sua importância.

O DynamoDB pode oferecer suporte a alguns casos de uso limitados de pesquisa de texto apenas usando particionamento para ajudar a filtrar os dados. Por exemplo, se você tiver um website de comércio eletrônico, poderá particionar dados no DynamoDB com base em uma categoria de produto e, em seguida, executar a pesquisa na memória. Aparentemente, é assim Divisão de varejo da Amazon.com lida com muitos casos de uso de pesquisa de texto. O DynamoDB também suporta um contém função que permite encontrar uma string que contém uma substring específica de dados.


Captura de tela 17/01/2023 às 19h17min10

Um website de comércio eletrônico pode particionar dados com base na categoria do produto. Atributos adicionais podem ser mostrados com os dados pesquisados, como marca e cor.

Em cenários em que a pesquisa de texto completo é essencial para seu aplicativo, você desejará usar um mecanismo de pesquisa como o Elasticsearch com uma classificação de relevância. Veja como a pesquisa de texto funciona em alto nível no Elasticsearch:

  • Classificação de relevância: o Elasticsearch tem uma classificação de relevância que fornece aos resultados da pesquisa prontos para uso ou você pode personalizar a classificação para o caso de uso de seu aplicativo específico. Por padrão, o Elasticsearch criará uma pontuação de classificação com base na frequência do termo, na frequência inversa do documento e na norma de comprimento do campo.
  • Análise de texto: o Elasticsearch divide o texto em tokens para indexar os dados, chamado tokenização. Os analisadores são então aplicados aos termos normalizados para aprimorar os resultados da pesquisa. O analisador padrão padrão divide o texto de acordo com o Unicode Consortium para fornecer suporte geral multilíngue.

O Elasticsearch também possui conceitos como pesquisa difusa, pesquisa de preenchimento automático e relevância ainda mais avançada que pode ser configurada para atender às especificidades da sua aplicação.

Filtros complexos em dados do DynamoDB usando Elasticsearch

Filtros complexos são usados ​​para restringir o conjunto de resultados, recuperando dados de forma mais rápida e eficiente. Em muitos cenários de pesquisa, você desejará combinar vários filtros ou filtrar um intervalo de dados, como durante um período de tempo.

Os dados de partições do DynamoDB e a escolha de uma boa chave de partição podem ajudar a tornar a filtragem de dados mais eficiente. O DynamoDB também oferece suporte a índices secundários para que você possa replicar seus dados e usar uma chave primária diferente para oferecer suporte a filtros adicionais. Índices secundários pode ser útil quando há vários padrões de acesso para seus dados.

Por exemplo, um aplicativo de logística poderia ser projetado para filtrar itens com base no standing de entrega. Para modelar esse cenário no DynamoDB, criaremos uma tabela base para logística com uma chave de partição de Item_IDuma chave de classificação de Standing e atributos do comprador, ETA e SLA.

Também precisamos oferecer suporte a um padrão de acesso adicional no DynamoDB para quando os atrasos na entrega excederem o SLA. Os índices secundários no DynamoDB podem ser aproveitados para filtrar apenas as entregas que excedem o SLA.

Um índice será criado no campo ETADelayedBeyondSLA que é uma réplica do atributo ETA já na tabela base. Esses dados são incluídos apenas em ETADelayedBeyondSLA quando o ETA excede o SLA. O índice secundário é um índice esparso, reduzindo a quantidade de dados que precisam ser verificados na consulta. O purchaser é a chave de partição e a chave de classificação é ETADelayedBeyondSLA.


Captura de tela 17/01/2023 às 19h1821


Captura de tela 17/01/2023 às 19h1922

Os índices secundários podem ser usados ​​para suportar vários padrões de acesso na aplicação, incluindo padrões de acesso que envolvem filtros complexos.

O DynamoDB tem um expressão de filtro operação em sua API Question and Scan para filtrar resultados que não correspondem a uma expressão. O filterexpression é aplicado somente após uma operação de consulta ou verificação de tabela, portanto você ainda está vinculado ao limite de 1 MB de dados para uma consulta. Dito isto, o filterexpression é útil para simplificar a lógica do aplicativo, reduzindo o tamanho da carga útil da resposta e validando a expiração do tempo de vida. Em resumo, você ainda precisará particionar seus dados de acordo com os padrões de acesso da sua aplicação ou usar índices secundários para filtrar dados no DynamoDB.

O DynamoDB organiza dados em chaves e valores para recuperação rápida de dados e não é ultimate para filtragem complexa. Quando você precisar de filtros complexos, você pode querer migrar para um mecanismo de pesquisa como o Elasticsearch, pois esses sistemas são ideais para consultas no palheiro.

No Elasticsearch, os dados são armazenados em um índice de pesquisa, ou seja, a lista de documentos para os quais o valor da coluna é armazenado como uma lista de postagens. Qualquer consulta que tenha um predicado (ou seja: WHERE consumer=A) pode buscar rapidamente a lista de documentos que satisfazem o predicado. À medida que as listas de postagem são classificadas, elas podem ser mescladas rapidamente no momento da consulta para que todos os critérios de filtragem sejam atendidos. Elasticsearch também usa cache simples para acelerar o processo de recuperação de consultas de filtro complexas acessadas com frequência.

Filtrar consultas, comumente chamadas de consultas sem pontuação no Elasticsearch, pode recuperar dados de forma mais rápida e eficiente do que consultas de pesquisa de texto. Isso ocorre porque a relevância não é necessária para essas consultas. Além disso, o Elasticsearch também oferece suporte a consultas de intervalo, possibilitando a recuperação rápida de dados entre um limite superior e inferior (ou seja: age entre 0-5).

Agregações em dados do DynamoDB usando Elasticsearch

Agregações ocorrem quando os dados são coletados e expressos em forma de resumo para inteligência de negócios ou análise de tendências. Por exemplo, você pode querer mostrar métricas de uso do seu aplicativo em tempo actual.

O DynamoDB não oferece suporte a funções agregadas. A solução alternativa recomendada pela AWS é usar DynamoDB e Lambda para manter uma visão agregada dos dados em uma tabela do DynamoDB.

Vamos usar agregando curtidas em um website de mídia social como o Twitter, por exemplo. Faremos o tweet_ID a chave primária e, em seguida, a chave de classificação, a janela de tempo pela qual estamos agregando curtidas. Nesse caso, habilitaremos streams do DynamoDB e anexaremos uma função Lambda para que, à medida que os tweets são curtidos (ou não), eles sejam tabulados em like_count com um carimbo de information/hora (ou seja: last_ up to date).


agregando curtidas

Nesse cenário, os streams do DynamoDB e as funções do Lambda são usados ​​para tabular um like_count como um atributo na tabela.

Outra opção é descarregar agregações para outro banco de dados, como o Elasticsearch. Elasticsearch é um índice de pesquisa em sua essência e adicionou extensões para oferecer suporte a funções de agregação. Uma dessas extensões é valores do documentouma estrutura construída no momento do índice para armazenar valores de documentos de forma orientada a colunas. A estrutura é aplicada por padrão a campos que suportam valores de documento e há algum excesso de armazenamento que acompanha valores de documento. Se você precisar apenas de suporte para agregações em dados do DynamoDB, pode ser mais econômico usar um information warehouse que possa compactar dados de maneira eficiente para consultas analíticas em conjuntos de dados amplos.

  • Aqui está uma visão geral de alto nível de Agregação do Elasticsearch estrutura:
  • Agregações de buckets: você pode pensar em buckets como algo semelhante a GROUP BY no mundo dos bancos de dados SQL. Você pode agrupar documentos com base em valores ou intervalos de campos. As agregações de bucket do Elasticsearch também incluem agregação aninhada e agregação pai-filho, que são soluções alternativas comuns para a falta de suporte de junção.
  • Agregações de métricas: as métricas permitem realizar cálculos como SUM, COUNT, AVG, MIN , MAXand so forth. em um conjunto de documentos. As métricas também podem ser usadas para calcular valores para uma agregação de bucket.
  • Agregações de pipeline: as entradas nas agregações de pipeline são outras agregações, e não documentos. Os usos comuns incluem médias e classificação com base em uma métrica.

Pode haver implicações no desempenho ao usar agregações, especialmente quando você escalar Elasticsearch.

Alternativa ao Elasticsearch para pesquisa, agregações e junções no DynamoDB

Embora o Elasticsearch seja uma solução para realizar pesquisas e agregações complexas em dados do DynamoDB, muitos proponentes sem servidor expressaram preocupações com esta escolha. As equipes de engenharia escolhem o DynamoDB porque ele é sem servidores e pode ser usado em escala com muito pouca sobrecarga operacional. Avaliamos algumas outras opções para análises no DynamoDBincluindo Athena, Spark e Rockset sobre facilidade de configuração, manutenção, capacidade de consulta e latência em outro weblog.

Rockset é uma alternativa ao Elasticsearch e Alex DeBrie abordou filtragem e agregação de consultas usando SQL no Rockset. Rockset é um banco de dados nativo da nuvem com um conector integrado para DynamoDBfacilitando o início e o dimensionamento de casos de uso analíticos, incluindo casos de uso que envolvem junções complexas. Você pode explorar o Rockset como uma alternativa ao Elasticsearch em nosso teste gratuito com $ 300 em créditos.



Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *