paint-brush
Uso de Elasticsearch para descargar búsquedas y análisis de DynamoDB: ventajas y desventajaspor@rocksetcloud
4,402 lecturas
4,402 lecturas

Uso de Elasticsearch para descargar búsquedas y análisis de DynamoDB: ventajas y desventajas

por Rockset8m2024/05/10
Read on Terminal Reader

Demasiado Largo; Para Leer

Si bien Elasticsearch es conocido por ser flexible y altamente personalizable, es un sistema distribuido complejo que requiere operaciones y administración de índices y clústeres para mantener su rendimiento.
featured image - Uso de Elasticsearch para descargar búsquedas y análisis de DynamoDB: ventajas y desventajas
Rockset HackerNoon profile picture


Análisis en DynamoDB

Los equipos de ingeniería a menudo necesitan ejecutar filtros complejos, agregaciones y búsquedas de texto en datos de DynamoDB. Sin embargo, DynamoDB es una base de datos operativa optimizada para el procesamiento de transacciones y no para análisis en tiempo real. Como resultado, muchos equipos de ingeniería alcanzan límites en el análisis en DynamoDB y buscan opciones alternativas.


Esto se debe a que las cargas de trabajo operativas tienen patrones de acceso muy diferentes a los de las cargas de trabajo analíticas complejas. DynamoDB solo admite un conjunto limitado de operaciones, lo que hace que el análisis sea un desafío y, en algunas situaciones, imposible. Incluso AWS , la empresa detrás de DynamoDB, aconseja a las empresas que consideren transferir análisis a otras soluciones especialmente diseñadas. Una solución a la que se hace referencia comúnmente es Elasticsearch, en la que profundizaremos hoy.


DynamoDB es una de las bases de datos NoSQL más populares y la utilizan muchas empresas a escala web en juegos, redes sociales, IoT y servicios financieros. DynamoDB es la base de datos elegida por su escalabilidad y simplicidad, lo que permite un rendimiento de milisegundos de un solo dígito a escalas de 20 millones de solicitudes por segundo. Para lograr esta velocidad a escala, DynamoDB se concentra en lograr el rendimiento para cargas de trabajo operativas: operaciones de alta frecuencia y baja latencia en registros de datos individuales.


Elasticsearch es un motor de búsqueda distribuido de código abierto construido en Lucene y utilizado para casos de uso de análisis de registros y búsqueda de texto. Elasticsearch es parte de la pila ELK más grande que incluye Kibana, una herramienta de visualización para paneles analíticos. Si bien Elasticsearch es conocido por ser flexible y altamente personalizable, es un sistema distribuido complejo que requiere operaciones y administración de índices y clústeres para mantener su rendimiento. Hay ofertas administradas de Elasticsearch disponibles en Elastic y AWS, por lo que no es necesario que las ejecute usted mismo en instancias EC2.


Shameless Plug: Rockset es una base de datos de análisis en tiempo real creada para la nube. Tiene un conector integrado para DynamoDB e ingiere e indexa datos para búsquedas, agregaciones y uniones en menos de un segundo. Pero esta publicación trata sobre resaltar casos de uso para DynamoDB y Elasticsearch, en caso de que desee explorar esa opción.

Conexión de DynamoDB a Elasticsearch mediante AWS Lambda

Puede utilizar AWS Lambda para cargar continuamente datos de DynamoDB en Elasticsearch para realizar análisis. Así es como funciona:


  • Cree una función lambda para sincronizar cada actualización de una transmisión de DynamoDB en Elasticsearch
  • Cree una función lambda para tomar una instantánea de la tabla de DynamoDB existente y enviarla a Elasticsearch. Puede utilizar un script EC2 o una secuencia de Amazon Kinesis para leer el contenido de la tabla de DynamoDB.



Existe un enfoque alternativo para sincronizar datos con Elasticsearch que involucra el complemento Logstash para DynamoDB, pero actualmente no es compatible y puede ser complejo de configurar.

Búsqueda de texto en datos de DynamoDB mediante Elasticsearch

La búsqueda de texto es la búsqueda de texto dentro de un documento para encontrar los resultados más relevantes. A menudo, querrás buscar una parte de una palabra, un sinónimo o antónimos de palabras o una serie de palabras juntas para encontrar el mejor resultado. Algunas aplicaciones incluso ponderarán los términos de búsqueda de manera diferente según su importancia.


DynamoDB puede admitir algunos casos de uso de búsqueda de texto limitado simplemente usando particiones para ayudar a filtrar los datos. Por ejemplo, si tiene un sitio de comercio electrónico, puede particionar datos en DynamoDB según una categoría de producto y luego ejecutar la búsqueda en memoria. Aparentemente, así es como la división minorista de Amazon.com maneja muchos casos de uso de búsqueda de texto. DynamoDB también admite una función de contenido que le permite buscar una cadena que contenga una subcadena de datos particular.



Un sitio de comercio electrónico puede dividir los datos según la categoría de producto. Se pueden mostrar atributos adicionales con los datos que se buscan, como la marca y el color.


En escenarios donde la búsqueda de texto completo es fundamental para su aplicación, querrá utilizar un motor de búsqueda como Elasticsearch con una clasificación de relevancia. Así es como funciona la búsqueda de texto a alto nivel en Elasticsearch:


  • Clasificación de relevancia : Elasticsearch tiene una clasificación de relevancia que proporciona a los resultados de búsqueda de forma inmediata o puede personalizar la clasificación para el caso de uso de su aplicación específica. De forma predeterminada, Elasticsearch creará una puntuación de clasificación basada en la frecuencia del término, la frecuencia inversa del documento y la norma de longitud del campo.


  • Análisis de texto : Elasticsearch divide el texto en tokens para indexar los datos, lo que se denomina tokenización. Luego se aplican analizadores a los términos normalizados para mejorar los resultados de búsqueda. El analizador estándar predeterminado divide el texto según el Consorcio Unicode para brindar soporte general en varios idiomas.


Elasticsearch también tiene conceptos como búsqueda difusa, búsqueda de autocompletar y una relevancia aún más avanzada que se puede configurar para cumplir con las características específicas de su aplicación.

Filtros complejos en datos de DynamoDB usando Elasticsearch

Se utilizan filtros complejos para limitar el conjunto de resultados, recuperando así datos de forma más rápida y eficiente. En muchos escenarios de búsqueda, querrás combinar varios filtros o filtrar según un rango de datos, por ejemplo, durante un período de tiempo.


DynamoDB particiona los datos y elige una buena clave de partición puede ayudar a que el filtrado de datos sea más eficiente. DynamoDB también admite índices secundarios para que pueda replicar sus datos y utilizar una clave principal diferente para admitir filtros adicionales. Los índices secundarios pueden resultar útiles cuando existen múltiples patrones de acceso a sus datos.


Por ejemplo, se podría diseñar una aplicación de logística para filtrar artículos según su estado de entrega. Para modelar este escenario en DynamoDB, crearemos una tabla base para logística con una clave de partición de Item_ID , una clave de clasificación de Status y atributos de comprador, ETA y SLA .


También necesitamos admitir un patrón de acceso adicional en DynamoDB para cuando los retrasos en la entrega excedan el SLA. Los índices secundarios en DynamoDB se pueden aprovechar para filtrar solo las entregas que exceden el SLA.


Se creará un índice en el campo ETADelayedBeyondSLA que es una réplica del atributo ETA que ya está en la tabla base. Estos datos solo se incluyen en ETADelayedBeyondSLA cuando la ETA excede el SLA. El índice secundario es un índice escaso, lo que reduce la cantidad de datos que deben escanearse en la consulta. El buyer es la clave de partición y la clave de clasificación es ETADelayedBeyondSLA .




Los índices secundarios se pueden utilizar para admitir múltiples patrones de acceso en la aplicación, incluidos patrones de acceso que involucran filtros complejos.


DynamoDB tiene una operación de expresión de filtro en su API de consulta y escaneo para filtrar los resultados que no coinciden con una expresión. La filterexpression se aplica solo después de una consulta o una operación de exploración de la tabla, por lo que aún está sujeto al límite de 1 MB de datos para una consulta. Dicho esto, la filterexpression es útil para simplificar la lógica de la aplicación, reducir el tamaño de la carga útil de la respuesta y validar la caducidad del tiempo de vida. En resumen, aún deberá dividir sus datos según los patrones de acceso de su aplicación o utilizar índices secundarios para filtrar datos en DynamoDB.


DynamoDB organiza datos en claves y valores para una recuperación rápida de datos y no es ideal para filtrado complejo. Cuando necesite filtros complejos, es posible que desee pasar a un motor de búsqueda como Elasticsearch, ya que estos sistemas son ideales para consultas en el pajar.


En Elasticsearch, los datos se almacenan en un índice de búsqueda, es decir, la lista de documentos para los cuales el valor de la columna se almacena como una lista de publicación. Cualquier consulta que tenga un predicado (es decir: WHERE usuario=A) puede recuperar rápidamente la lista de documentos que satisfacen el predicado. A medida que se ordenan las listas de publicaciones, se pueden combinar rápidamente en el momento de la consulta para que se cumplan todos los criterios de filtrado. Elasticsearch también utilizaun almacenamiento en caché simple para acelerar el proceso de recuperación de consultas de filtro complejas a las que se accede con frecuencia.


Las consultas de filtrado, comúnmente denominadas consultas sin puntuación en Elasticsearch, pueden recuperar datos de forma más rápida y eficiente que las consultas de búsqueda de texto. Esto se debe a que estas consultas no necesitan relevancia. Además, Elasticsearch también admite consultas de rango, lo que permite recuperar datos rápidamente entre un límite superior e inferior (es decir, age entre 0 y 5 años).

Agregaciones de datos de DynamoDB mediante Elasticsearch

Las agregaciones son cuando los datos se recopilan y expresan en forma de resumen para inteligencia empresarial o análisis de tendencias. Por ejemplo, es posible que desee mostrar métricas de uso de su aplicación en tiempo real.


DynamoDB no admite funciones agregadas. La solución alternativa recomendada por AWS es utilizar DynamoDB y Lambda para mantener una vista agregada de los datos en una tabla de DynamoDB.


Usemos como ejemplo la agregación de Me gusta en un sitio de redes sociales como Twitter. Haremos que tweet_ID sea la clave principal y luego la clave de clasificación sea la ventana de tiempo mediante la cual agregamos Me gusta. En este caso, habilitaremos las transmisiones de DynamoDB y adjuntaremos una función Lambda para que, a medida que los tweets reciben "me gusta" (o "no me gusta"), se tabulen en like_count con una marca de tiempo (es decir, last_ updated ).



En este escenario, las secuencias de DynamoDB y las funciones Lambda se utilizan para tabular un like_count como un atributo en la tabla.


Otra opción es descargar agregaciones a otra base de datos, como Elasticsearch. Elasticsearch es esencialmente un índice de búsqueda y ha agregado extensiones para admitir funciones de agregación. Una de esas extensiones es valores de documento , una estructura creada en el momento del índice para almacenar valores de documentos orientados a columnas. La estructura se aplica de forma predeterminada a los campos que admiten valores de documentos y hay cierta sobrecarga de almacenamiento que viene con los valores de documentos. Si solo necesita soporte para agregaciones de datos de DynamoDB, puede resultar más rentable utilizar un almacén de datos que pueda comprimir datos de manera eficiente para consultas analíticas en conjuntos de datos amplios.


A continuación se ofrece una descripción general de alto nivel del marco de agregación de Elasticsearch :


  • Agregaciones de depósitos : puede considerar el almacenamiento como algo similar a GROUP BY en el mundo de las bases de datos SQL. Puede agrupar documentos según valores o rangos de campo. Las agregaciones de depósitos de Elasticsearch también incluyen la agregación anidada y la agregación padre-hijo que son soluciones comunes a la falta de compatibilidad con la unión.

  • Agregaciones de métricas: las métricas le permiten realizar cálculos como SUM , COUNT , AVG , MIN , MAX , etc. en un conjunto de documentos. Las métricas también se pueden utilizar para calcular valores para una agregación de depósitos.

  • Agregaciones de canalizaciones : las entradas de las agregaciones de canalizaciones son otras agregaciones en lugar de documentos. Los usos comunes incluyen promedios y clasificación basada en una métrica.


Puede haber implicaciones en el rendimiento al usar agregaciones, especialmente a medida que se escala Elasticsearch .

Alternativa a Elasticsearch para búsquedas, agregaciones y uniones en DynamoDB

Si bien Elasticsearch es una solución para realizar búsquedas complejas y agregaciones de datos de DynamoDB, muchos defensores de la tecnología sin servidor se han hecho eco de sus preocupaciones con esta elección. Los equipos de ingeniería eligen DynamoDB porque no tiene servidores y se puede utilizar a escala con muy poca sobrecarga operativa. Hemos evaluado algunas otras opciones de análisis en DynamoDB , incluidas Athena, Spark y Rockset, en cuanto a facilidad de configuración, mantenimiento, capacidad de consulta y latencia en otro blog.


Rockset es una alternativa a Elasticsearch y Alex DeBrie ha analizado el filtrado y la agregación de consultas utilizando SQL en Rockset. Rockset es una base de datos nativa de la nube con un conector integrado para DynamoDB , lo que facilita comenzar y escalar casos de uso analíticos, incluidos casos de uso que involucran uniones complejas. Puede explorar Rockset como alternativa a Elasticsearch en nuestra prueba gratuita con $300 en créditos.