what units the provisionedthroughput provisioned for exceeded dynamodb configured aws amazon-dynamodb

amazon dynamodb - units - Obtener los Ășltimos N registros en una tabla de DynamoDB



throughput aws (2)

¿Hay alguna forma de obtener los últimos N registros de una tabla dynamodb? La clave de rango que tengo es la marca de tiempo. Así que podría usar el ScanIndex para ordenar los artículos cronológicamente.

Pero para consultar necesito tener una condición de hashKey, que no quiero filtrar. ¿Alguna idea?


DynamoDB no está diseñado para funcionar de esta manera. Los elementos se distribuyen de acuerdo con un hash en el HashKey de tal manera que el orden no es predecible.

Sus opciones incluyen:

  • agrupando los elementos en una sola clave de hash (no recomendado: sobrecargaría algunos servidores con sus datos y Amazon no puede garantizar su capacidad de lectura / escritura)
  • escaneando toda la tabla y conservando los N elementos más recientes (algo así como for (item in items) { if (item newer then oldest accumulated item) accumulate item; } );
  • divida su tabla en varias tablas (es decir, en lugar de una tabla llamada Events , cree una llamada Events20130705 para los eventos de hoy, Events20130706 para los eventos de mañana) y escanee igual que la opción anterior, de esta manera sus exploraciones son más pequeñas

También podría cambiar su modelo de datos. Por ejemplo, podría tener una entrada versionada que mantendría las referencias a los N elementos más recientes. O podría tener algo así como un solo contador que incrementaría y actualizaría N otras entradas bajo teclas hash, como K-reciente, donde K es su mod N. de contador.

Tal vez incluso puedas usar otra herramienta para este trabajo. Por ejemplo, podría tener un servidor Redis para hacer esto. Sin conocer su caso de uso con mucho más detalle, es difícil hacer una sugerencia precisa: ¿qué tan escalable debería ser esto? ¿Qué tan confiable debe ser? ¿Cuánto mantenimiento estás dispuesto a realizar? ¿Cuánto estás dispuesto a pagar por ello?

Por lo general, es mejor abrazar la limitación, conocer sus limitaciones y ser creativo.


No estoy seguro de que esto siga siendo relevante. Estoy bastante seguro de que puede usar ScanIndexForward junto con un rangeKey para obtener el último valor.