es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Creación de resultados de búsqueda rápidos para datos en DynamoDB.

He almacenado más de 100000 elementos en una tabla DynamoDB (clave-valor). Quiero ofrecer al usuario la funcionalidad de ingresar una palabra de búsqueda y encontrar elementos en esta tabla que coincidan con la palabra de búsqueda. ¿Cuál es una buena manera de lograr esto en menos de 3 segundos? Tengo algunas ideas, pero me gustaría validarlas con la comunidad, mi enfoque favorito sería:

  1. Escanear la base de datos de Dynamo cada hora y almacenar los elementos como JSON en una tabla de DynamoDB separada con solo 1 clave. (De esta manera, no tengo que escanear todos los elementos cada vez que un usuario realiza una búsqueda).
  2. Cada vez que el usuario busca, enviar una solicitud GET a una función lambda que recupera el JSON de los elementos de la tabla de DynamoDB separada. (Advertencia: esto puede ser problemático con más de 100000 elementos, tamaño grande y llevará tiempo).
  3. La función Lambda recibe todos los elementos en JSON y los ejecuta a través de un algoritmo de búsqueda.
  4. La función lambda produce una lista (ordenada por relevancia) de elementos para responder al usuario (es decir, los resultados de la búsqueda).

Hay 2 problemas principales con este enfoque que me hace pensar que DynamoDB no es la herramienta adecuada para esta tarea:

  1. DynamoDB no puede almacenar JSON más grande que 400 KB.
  2. El tiempo que tarda la función lambda en recuperar un JSON de más de 100000 elementos de una tabla DynamoDB.

Otras soluciones que estoy considerando incluyen el almacenamiento en caché y Elasticsearch. ¿Hay algún consenso sobre cuál es una buena manera de realizar esto?

Edición 1:

También estoy considerando almacenar el JSON en S3 porque no hay límite de tamaño de archivo y se rumorea que es más rápido para que la función lambda recupere datos de S3 que de una consulta con clave de DynamoDB (?).

Edición 2:

También estoy considerando almacenar los datos como variables persistentes en la función lambda, aunque no estoy seguro de cómo funcionaría exactamente. ¿Esto es incluso posible?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Busqueda de Artículos en una Tabla de DynamoDB

    Como experto en tecnologías de Amazon Web Services, Elasticsearch, Amazon S3, AWS Lambda, y Amazon DynamoDB, hay algunas consideraciones para ofrecer funcionalidad de búsqueda a los usuarios en una tabla de DynamoDB con más de 100,000 artículos. El objetivo principal es lograr la funcionalidad de búsqueda en menos de 3 segundos.

    Validación de Enfoques

    Se pueden tomar los siguientes enfoques para proporcionar funcionalidad de búsqueda:

    1. Escanear una Tabla de DynamoDB y Almacenar Artículos como JSON: Este enfoque implica escanear la tabla de DynamoDB periódicamente y almacenar los artículos como JSON en una tabla de DynamoDB separada con solo 1 llave. Este enfoque reduce el tiempo que se tarda en escanear todos los artículos cada vez que un usuario realiza una búsqueda.
    2. Obtener el JSON de Artículos desde una Tabla de DynamoDB Separada: Cuando un usuario realiza una búsqueda, se envía una solicitud GET a una función lambda que obtiene el JSON de los artículos de la tabla de DynamoDB separada. Este enfoque puede ser problemático al tratar con más de 100,000 artículos con un tamaño grande, ya que lleva tiempo.

    3. Ejecutar el JSON de Artículos a través de un Algoritmo de Búsqueda: Una vez que la función lambda recibe todos los artículos en JSON, puede ejecutarlos a través de un algoritmo de búsqueda para producir una lista ordenada de los artículos en orden de relevancia que coincidan con la palabra de búsqueda.

    4. Almacenar en Caché los Datos y Usar Elasticsearch: Otras soluciones a considerar incluyen el almacenamiento en caché y Elasticsearch. El almacenamiento en caché implica almacenar los datos de acceso frecuente cerca del usuario para reducir el tiempo de consulta. Elasticsearch es un motor de búsqueda construido encima de Lucene que se utiliza comúnmente para mejorar el rendimiento de la búsqueda.

    Consideraciones para los Enfoques

    Cuando se consideran los enfoques anteriores, surgen problemas significativos que podrían hacer que DynamoDB no sea la herramienta adecuada para el trabajo. Por ejemplo, DynamoDB no puede almacenar JSON más grande que 400KB. Además, el tiempo que lleva a la función lambda recuperar un JSON de más de 100,000 artículos de una tabla de DynamoDB puede superar los 3 segundos.

    Para superar estas limitaciones, se pueden considerar otras opciones, como almacenar el JSON en Amazon S3. No hay límite de tamaño de archivo para S3, y se cree que Lambda puede recuperar datos más rápido desde S3 en lugar de consultar con una clave de DynamoDB.

    Otra opción es almacenar los datos como variables persistentes en la función Lambda. Sin embargo, no hay mucha información disponible sobre cómo funcionaría esto.

    Por lo tanto, se recomienda usar el almacenamiento en caché o Elasticsearch al tratar con una cantidad tan grande de artículos dentro de una tabla de DynamoDB para lograr la funcionalidad de búsqueda en menos de 3 segundos.

Comments are closed.