Sacar partido de los índices dispersos - Amazon DynamoDB

Sacar partido de los índices dispersos

En cualquier elemento de una tabla, DynamoDB escribe una entrada de índice solo si el valor de clave de ordenación del índice se encuentra presente en el elemento. Si la clave de clasificación no aparece en todos los elementos de la tabla, o si la clave de partición de índice no está presente en el elemento, se considera que el índice es disperso.

Los índices dispersos resultan útiles para las consultas que se realizan en una pequeña subsección de una tabla. Por ejemplo, supongamos que tiene una tabla en la que almacena todos los pedidos de los clientes con los siguientes atributos de clave:

  • Clave de partición: CustomerId

  • El criterio de ordenación: OrderId

Para hacer un seguimiento de los pedidos abiertos, puede incluir un atributo llamado isOpen en los elementos de pedido que aún no se han enviado. Posteriormente, cuando estos pedidos se envíen, podrá borrar el atributo. Si crea un índice de CustomerId (clave de partición) e isOpen (clave de ordenación), en este índice solo aparecerán los pedidos en los que isOpen está definido. Cuando tiene miles de pedidos de los cuales solo hay abiertos un pequeño número, resulta más rápido y económico consultar los pedidos abiertos de ese índice que examinar toda la tabla.

En lugar de utilizar un tipo de atributo como isOpen, podría utilizar en el índice un atributo con un valor que diera como resultado un criterio de ordenación útil. Por ejemplo, podría utilizar un atributo OrderOpenDate establecido en la fecha en la que se realizó el pedido y borrarlo cuando el pedido se haya completado. De ese modo, cuando consulte el índice disperso, los elementos devueltos estarán ordenados en función de la fecha en que se realizó cada pedido.

Ejemplos de índices dispersos en DynamoDB

De forma predeterminada, los índices secundarios globales son dispersos. Cuando crea un índice secundario global, especifica una clave de partición y, de forma opcional, una clave de ordenación. Solo los elementos de la tabla principal que contienen esos atributos aparecen en el índice.

Si diseña un índice secundario global para que sea disperso, puede aprovisionarlo con un menor rendimiento de escritura que el de la tabla base y seguir disfrutando de un nivel de rendimiento excelente.

Por ejemplo, es posible que una aplicación de juego hiciera un seguimiento de todas las puntuaciones de cada usuario, pero lo normal es que solo deban consultarse unas cuentas puntuaciones. El diseño siguiente se adapta eficazmente a este escenario:

Ejemplo de un GSI disperso.

Aquí, Rick ha jugado tres partidas y ha conseguido el estado Champ en una de ellas. Padma ha jugado cuatro partidas y ha conseguido el estado Champ en dos de ellas. Observe que el atributo Award solamente está presente en los elementos en los que el usuario consiguió una recompensa. El índice secundario global asociado sería similar al siguiente:

Ejemplo de un GSI disperso.

El índice secundario global únicamente contiene las puntuaciones máximas que se consultan con frecuencia, lo que conforma un pequeño subconjunto de los elementos de la tabla base.