Uso de índices secundarios globales para consultas de agregación materializadas en DynamoDB
Mantener métricas clave y agregaciones casi en tiempo real sobre datos que cambian rápidamente es algo que las compañías cada vez valoran más, ya que les permite tomar decisiones rápidas. Por ejemplo, una biblioteca de música quiere mostrar las canciones más descargadas prácticamente en tiempo real.
Pensemos en el diseño de la tabla de una biblioteca de música:
La tabla de este ejemplo almacena canciones con la clave de partición songID
. Puede habilitar Amazon DynamoDB Streams en esta tabla y adjuntar una función Lambda a las transmisiones para que cada vez que se descargue una canción se agregue una entrada a la tabla con Partition-Key=SongID
y Sort-Key=DownloadID
. A medida que se realizan, estas actualizaciones desencadenan una función Lambda en DynamoDB Streams. La función Lambda puede agregar y agrupar las descargas por songID
y actualizar el elemento de nivel superior: Partition-Key=songID
y Sort-Key=Month
. Tenga en cuenta que, si una ejecución lambda falla justo después de escribir el nuevo valor agregado, esta ejecución podría volver a intentarse y el valor podría agregarse varias veces, lo que dejaría un valor aproximado.
Para leer las actualizaciones prácticamente en tiempo real con una latencia en milisegundos de un solo dígito, utilice el índice secundario global con las condiciones de consulta Month=2018-01
, ScanIndexForward=False
, Limit=1
.
Otra importante optimización que se utiliza aquí es que el índice secundario global es un índice disperso y solo está disponible en los elementos que deben consultarse para recuperar los datos en tiempo real. El índice secundario global puede proporcionar flujos de trabajo adicionales que necesiten información sobre las 10 canciones más populares o cualquier canción descargada ese mes.