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 , 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. AWS 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. DynamoDB 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. Elasticsearch Shameless Plug: 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. Rockset 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 en Elasticsearch transmisión de DynamoDB Cree una función lambda para tomar una instantánea de la tabla de DynamoDB existente y enviarla a Elasticsearch. Puede utilizar un o una para leer el contenido de la tabla de DynamoDB. script EC2 secuencia de Amazon Kinesis Existe un enfoque alternativo para sincronizar datos con Elasticsearch que involucra el para DynamoDB, pero actualmente no es compatible y puede ser complejo de configurar. complemento Logstash 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 maneja muchos casos de uso de búsqueda de texto. DynamoDB también admite una que le permite buscar una cadena que contenga una subcadena de datos particular. la división minorista de Amazon.com función de contenido 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: : 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. Clasificación de relevancia : 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. Análisis de texto 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. pueden resultar útiles cuando existen múltiples patrones de acceso a sus datos. Los índices secundarios 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 , una clave de clasificación de y atributos de comprador, y . Item_ID Status ETA 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 que es una réplica del atributo ETA que ya está en la tabla base. Estos datos solo se incluyen en 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 es la clave de partición y la clave de clasificación es . ETADelayedBeyondSLA ETADelayedBeyondSLA buyer 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 en su API de consulta y escaneo para filtrar los resultados que no coinciden con una expresión. La 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 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. de expresión de filtro filterexpression filterexpression 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: 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 utiliza para acelerar el proceso de recuperación de consultas de filtro complejas a las que se accede con frecuencia. WHERE un almacenamiento en caché simple Las consultas de filtrado, comúnmente denominadas 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, entre 0 y 5 años). consultas sin puntuación age 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 para mantener una vista agregada de los datos en una tabla de DynamoDB. DynamoDB y Lambda Usemos como ejemplo en un sitio de redes sociales como Twitter. Haremos que 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 con una marca de tiempo (es decir, ). la agregación de Me gusta tweet_ID like_count 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 , 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. valores de documento A continuación se ofrece una descripción general de alto nivel del marco : de agregación de Elasticsearch : puede considerar el almacenamiento como algo similar a 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 depósitos GROUP BY las métricas le permiten realizar cálculos como , , , , , 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 métricas: SUM COUNT AVG MIN MAX : 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. Agregaciones de canalizaciones 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 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 , incluidas Athena, Spark y Rockset, en cuanto a facilidad de configuración, mantenimiento, capacidad de consulta y latencia en otro blog. defensores de la tecnología sin servidor análisis en DynamoDB Rockset es una alternativa a Elasticsearch y Alex DeBrie ha analizado utilizando SQL en Rockset. Rockset es una base de datos nativa de la nube con un , 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 con $300 en créditos. el filtrado y la agregación de consultas conector integrado para DynamoDB prueba gratuita