tutorial pricing nodejs español dynamodb database nosql amazon-dynamodb

database - pricing - ¿Cómo consultas DynamoDB?



dynamodb vs mongodb (3)

Estoy mirando DynamoDB de Amazon, ya que parece que le quita todas las molestias de mantener y escalar su servidor de base de datos. Actualmente estoy usando MySQL, y mantener y escalar la base de datos es un dolor de cabeza completo.

He revisado la documentación y estoy teniendo dificultades para entender cómo estructurar los datos para poder recuperarlos fácilmente.

Soy totalmente nuevo en NoSQL y bases de datos no relacionales.

Según la documentación de Dynamo, parece que solo puede consultar una tabla en la clave hash primaria y la clave de rango principal con un número limitado de operadores de comparación.

O puede ejecutar un escaneo completo de la tabla y aplicarle un filtro. El problema es que solo escaneará 1Mb a la vez, por lo que es probable que tenga que repetir el escaneo para encontrar una X cantidad de resultados.

Me doy cuenta de que estas limitaciones les permiten proporcionar un rendimiento predecible, pero parece que hace que sea realmente difícil sacar sus datos. Y realizar escaneos completos de tablas parece ser realmente ineficiente, y solo se volvería menos eficiente con el tiempo a medida que su tabla crezca.

Por ejemplo, digamos que tengo un clon de Flickr. La tabla de Mis imágenes puede ser algo así como:

  • ID de imagen (número, clave hash primaria)
  • Fecha agregada (número, clave de rango principal)
  • ID de usuario (cadena)
  • Etiquetas (Set de cuerdas)
  • etc

Entonces, usando la consulta, podría listar todas las imágenes de los últimos 7 días y limitarla a X cantidad de resultados con bastante facilidad.

Pero si quisiera hacer una lista de todas las imágenes de un usuario en particular, necesitaría hacer una exploración de tabla completa y filtrar por nombre de usuario. Lo mismo ocurriría con las etiquetas.

Y debido a que solo puede escanear 1Mb a la vez, es posible que necesite realizar varios escaneos para encontrar una X cantidad de imágenes. Tampoco veo una forma de detenerse fácilmente en X cantidad de imágenes. Si intenta obtener 30 imágenes, su primer escaneo podría encontrar 5 y el segundo puede encontrar 40.

¿Tengo esto bien? ¿Es básicamente una compensación? Obtiene un rendimiento de base de datos predecible realmente rápido que prácticamente no requiere mantenimiento. ¿Pero la desventaja es que necesitas construir más lógica para lidiar con los resultados?

¿O estoy totalmente fuera de la base aquí?


Creo que necesitas crear tu propio índice secundario , usando otra tabla.

Esta tabla "esquema" podría ser:

User ID (String, Primary Key) Date Added (Number, Range Key) Image ID (Number)

-

De esta forma puede consultar por ID de usuario y filtrar por Fecha también


Puede usar la clave compuesta de rangos hash como índice principal.

Desde la página de DynamoDB:

Una clave principal puede ser una clave hash de atributo único o una clave compuesta de rango hash. Una clave primaria de hash de atributo único podría ser, por ejemplo, "UserID". Esto le permitirá leer y escribir datos rápidamente para un elemento asociado con una ID de usuario determinada.

Una clave compuesta de rango hash se indexa como un elemento de clave hash y un elemento clave de rango. Esta clave de varias partes mantiene una jerarquía entre los valores del primer y segundo elemento. Por ejemplo, una clave compuesta de rango de hash podría ser una combinación de "UserID" (hash) y "Timestamp" (rango). Manteniendo constante el elemento clave hash, puede buscar en todo el elemento clave range para recuperar elementos. Esto le permitiría usar la API de consulta para, por ejemplo, recuperar todos los elementos para un único ID de usuario en un rango de marcas de tiempo.


Sí, tiene razón acerca de la compensación entre el rendimiento y la flexibilidad de la consulta.

Pero hay algunos trucos para reducir el dolor, los índices secundarios / desnormalización probablemente sean los más importantes.

Tendría otra tabla introducida en la identificación del usuario, con una lista de todas sus imágenes, por ejemplo. Cuando agrega una imagen, actualiza esta tabla y agrega una fila a la tabla introducida en la identificación de la imagen.

Debe decidir qué consultas necesita y luego diseñar el modelo de datos a su alrededor.