¿Por qué mi análisis de DynamoDB es tan rápido con solo 1 unidad de capacidad de lectura aprovisionada?

Aug 19 2020

Hice una tabla con 1346 elementos, cada elemento con un tamaño inferior a 4 KB. Aprovisioné 1 unidad de capacidad de lectura, por lo que esperaría una lectura promedio de 1 elemento por segundo. Sin embargo, un simple escaneo de los 1346 elementos regresa casi de inmediato.

¿Que me estoy perdiendo aqui?

Respuestas

4 ChrisWilliams Aug 19 2020 at 14:24

Es probable que esto se deba a la capacidad de ráfaga en la que obtiene su capacidad durante un período de 300 segundos para usar en acciones de ráfaga (como escanear una tabla completa).

Esto significaría que si usaste todos estos créditos, otras interacciones se verían afectadas, ya que no tienen suficiente capacidad disponible para ellas.

Puede ver la cantidad de WCU/RCU consumida a través de las métricas de CloudWatch o dentro de la propia interfaz de DynamoDB (a través de la pestaña Métricas).

2 Charles Aug 19 2020 at 22:43

No proporciona un tamaño para sus entradas, excepto para decir "cada elemento tiene menos de 4 KB". ¿Cuánto menos?

1 RCU admitirá 2 lecturas eventualmente consistentes por segundo de elementos de hasta 4 KB.

Para decirlo de otra manera, con 1 RCU y eventualmente lecturas consistentes, puede leer 8 KB de datos por segundo.

Si sus registros son de 4 KB, obtiene 2 registros/seg 1
KB, 8/seg
512B, 16/seg
256B, 32/seg

Entonces, la capacidad de "ráfaga" ya mencionada le permitió usar 55 RCU. Pero el pequeño tamaño de sus registros permitió que 55 RCU devolvieran los datos "casi inmediatamente"

1 NadavHar'El Aug 20 2020 at 18:01

Hay dos cosas que funcionan a su favor aquí: una es que una Scanoperación requiere significativamente menos RCU de lo que pensaba para artículos pequeños. La otra cosa es la "capacidad de ráfaga". Voy a tratar de explicar ambos:

La página de precios de DynamoDB dice que "para elementos de hasta 4 KB de tamaño, una RCU puede realizar dos solicitudes de lectura finalmente consistentes por segundo". Esto sugiere que incluso si el elemento tiene un tamaño de 10 bytes, cuesta la mitad de una RCU para leerlo con coherencia final. Sin embargo, aunque no lo indican en ninguna parte, este costo solo es cierto para una GetItemoperación para recuperar un solo artículo. En a Scano Query, resulta que no paga por separado cada artículo individual. En cambio, estas operaciones escanean secuencialmente los datos almacenados en el disco y usted paga por la cantidad de datos leídos. Si tiene 1000 elementos pequeños y el tamaño total que DynamoDB tuvo que leer del disco fue de 80 KB, pagará 80 KB/4 KB/2, o 10 RCU, no 500 RCU.

Esto explica por qué leyó 1346 elementos y midió solo 55 RCU, no 1346/2 = 673.

La segunda cosa que funciona a su favor es que DynamoDB tiene la capacidad de "capacidad de ráfaga", que se describe aquí :

Actualmente, DynamoDB retiene hasta 5 minutos (300 segundos) de capacidad de lectura y escritura no utilizada. Durante una ráfaga ocasional de actividad de lectura o escritura, estas unidades de capacidad adicional se pueden consumir rápidamente, incluso más rápido que la capacidad de rendimiento aprovisionada por segundo que ha definido para su tabla.

Entonces, si su base de datos existió durante 5 minutos antes de su solicitud, DynamoDB guardó 300 RCU para usted, que puede usar muy rápidamente. Dado que 300 RCU es mucho más de lo que necesitaba para su escaneo (55), su escaneo se realizó muy rápido, sin estrangulamiento.

1 SudhirJonathan Aug 24 2020 at 13:45

Cuando realiza una consulta, el recuento de RCU se aplica a la cantidad de datos leídos sin tener en cuenta la cantidad de elementos leídos. Entonces, si sus elementos son pequeños, digamos unos pocos bytes cada uno, se pueden consultar fácilmente dentro de una sola RCU de 4 KB.

Esto es especialmente útil cuando también se leen muchos elementos de DynamoDB. No es inmediatamente obvio que consultar muchos elementos pequeños sea mucho más barato y más eficiente que obtenerlos por lotes.