pricing dynamodb demand nosql amazon-dynamodb azure-table-storage

demand - NoSQL: Obtención de los últimos valores de las tablas DynamoDB/Azure Table Storage



dynamodb pricing (2)

Acabo de publicar un artículo hoy con algunas "recetas" comunes sobre DynamoDB . Uno de ellos es "Almacenar revisiones de artículos, obteniendo siempre lo último" Creo que podría interesarte :)

En pocas palabras, puede obtener el último elemento utilizando Query(hash_key=..., ScanIndexForward=True, limit=1)

Pero, esto supone que tienes un range_key_defined.

Con Scan , no tiene ningún parámetro como ScanIndexForward=false y, de todos modos, no puede confiar en el pedido, ya que los datos se reparten entre las particiones y la solicitud de Scan se carga con una carga equilibrada.

Para lograr su objetivo con DynamoDB, puede "dividir" su marca de tiempo de esta manera:

  1. hash_key : fecha
  2. range_key : hora o marca de tiempo completa, como prefiera

Luego, puede usar el ''truco'' de Query + Limit=1 + ScanIndexForward=false

Tengo un pequeño problema que necesita algunas sugerencias:

  • Digamos que tenemos unos pocos cientos de tablas de datos con unas pocas docenas de millones de filas cada una.
  • Las tablas de datos son marca de tiempo (clave) - valor
  • Las tablas de datos se escriben una vez por segundo.

La última entrada de cada tabla debe obtenerse rápidamente y lo más probable es que sea la más consultada (por ejemplo, "seguir datos en tiempo real"). Con la falta de ''Last ()'' o similar, estaba pensando en crear otra tabla "LatestValues" donde se actualice la última entrada de cada tabla de datos para una recuperación más rápida. Esto, sin embargo, agregaría una actualización adicional para cada operación de escritura. Además, la mayor parte del tráfico se concentraría en esta tabla (¿bueno / malo?). ¿Hay una solución mejor para esto o me estoy perdiendo algo?

Además, digamos que queremos consultar los valores en las tablas de datos. Dado que el escaneo está obviamente fuera de la cuestión, ¿es la única opción que queda para crear un índice secundario duplicando los datos, duplicando efectivamente los requisitos de almacenamiento y las operaciones de escritura de cantidad? ¿Alguna otra solución?

Principalmente estoy viendo DynamoDB y Azure Table Storage, pero también tengo curiosidad por cómo BigTable maneja esto.


En general, es probable que solo desee invertir la marca de tiempo, por lo que disminuye con el tiempo, dejando la fila más reciente en la parte superior.

Aquí hay una publicación de mi blog que describe cómo hacer esto con el almacenamiento de Windows Azure: http://blog.smarx.com/posts/using-numbers-as-keys-in-windows-azure .

ACTUALIZAR

Uso DynamoDB para un proyecto, pero de una manera muy simplista, por lo que no tengo mucha experiencia. Dicho esto, http://docs.amazonwebservices.com/amazondynamodb/latest/developerguide/QueryAndScan.html me sugiere que solo pueda especificar ScanIndexForward=false y Limit=1 para obtener el último elemento.