Particiones y distribución de datos - Amazon DynamoDB

Particiones y distribución de datos

Amazon DynamoDB almacena los datos en las particiones. Una partición es una asignación de almacenamiento a una tabla que se sustenta en discos de estado sólido (SSD) y se replica automáticamente en varias zonas de disponibilidad de una región de AWS. DynamoDB se encarga de todo lo que concierne a la administración de las particiones para que usted no tenga que ocuparse de ello.

Al crear una tabla, su estado inicial es CREATING. Durante esta fase, DynamoDB asigna particiones suficientes a la tabla para que pueda satisfacer los requisitos de rendimiento aprovisionado. Puede comenzar a escribir y leer datos en la tabla una vez que su estado haya cambiado a ACTIVE.

DynamoDB asigna particiones adicionales a una tabla en las siguientes situaciones:

  • Si aumenta los ajustes de rendimiento aprovisionado de la tabla de tal forma que se supere el límite admitido por las particiones existentes.

  • Si una partición existente se llena al límite de su capacidad y se requiere más espacio de almacenamiento.

La administración de las particiones tiene lugar automáticamente en segundo plano y es transparente para las aplicaciones. La tabla permanece disponible a lo largo del proceso y responde en todo momento a los requisitos de rendimiento aprovisionado.

Para obtener más información, consulte Diseño de claves de partición.

Los índices secundarios globales de DynamoDB también constan de particiones. Los datos de un índice secundario global se almacenan de forma independiente de los datos de la tabla base, pero las particiones de índices se comportan prácticamente igual que las particiones de tablas.

Distribución de datos: clave de partición

Si la tabla tiene una clave principal simple (solo clave de partición), DynamoDB almacenará y recuperará cada elemento basándose en su valor de clave de partición.

Para escribir un elemento en la tabla, DynamoDB utiliza el valor de la clave de partición como información de entrada para una función hash interna. El valor del resultado de la función hash determina la partición donde se almacenará el elemento.

Para leer un elemento de la tabla, debe especificar el valor de clave de partición del elemento. DynamoDB utiliza este valor como información de entrada para la función hash para obtener la partición en la que se encuentra el elemento.

En el siguiente diagrama se muestra una tabla denominada Pets que abarca varias particiones. La clave principal de la tabla es AnimalType (solo se muestra este atributo de clave). DynamoDB utiliza la función hash para determinar dónde se almacenará un nuevo elemento, en este caso de acuerdo con el valor hash de la cadena Dog. Tenga en cuenta que los elementos no se almacenan de forma ordenada. La ubicación de cada elemento viene determinada por el valor hash de su clave de partición.

nota

DynamoDB está optimizado para distribuir los elementos uniformemente entre las particiones de una tabla, con independencia del número de particiones que haya. Recomendamos elegir una clave de partición que pueda tener un amplio abanico de valores distintos en relación con el número de elementos de la tabla.

Distribución de datos: clave de partición y clave de clasificación

Si la tabla tiene una clave principal compuesta (clave de partición y clave de ordenación), DynamoDB calcula el valor hash de la clave de partición de la misma forma que se describe en Distribución de datos: clave de partición. Sin embargo, tiende a mantener los elementos que tienen el mismo valor de clave de partición juntos y ordenados según el valor del atributo de la clave de clasificación. Al conjunto de elementos que tienen el mismo valor de la clave de partición se le denomina recopilación de elementos. Las recopilaciones de elementos están optimizadas para recuperar de forma eficiente los rangos de los elementos de la recopilación. Si la tabla no tiene índices secundarios locales, DynamoDB dividirá automáticamente la recopilación de elementos en tantas particiones como sea necesario para almacenar los datos y garantizar el rendimiento de lectura y escritura.

Para escribir un elemento en la tabla, DynamoDB calcula el valor hash de su clave de partición, con el fin de determinar qué partición debe contener el elemento. En dicha partición, varios elementos podrían tener el mismo valor de clave de partición. Por tanto, DynamoDB almacena el elemento con los otros que tienen la misma clave de partición, en orden ascendente por clave de ordenación.

Para leer un elemento de la tabla, debe especificar los valores de sus claves de partición y ordenación. DynamoDB calcula el valor hash de la clave de partición para obtener la partición en la que se encuentra el elemento.

Puede leer varios elementos de la tabla en una misma operación (Query), si los elementos que desee leer tengan el mismo valor de clave de partición. DynamoDB devuelve todos los elementos que contienen ese valor de clave de partición. De forma opcional, puede aplicar una condición a la clave de ordenación para que devuelva solamente los elementos comprendidos en un rango de valores determinado.

Supongamos que la tabla Pets tiene una clave principal compuesta que consta de AnimalType (clave de partición) y Name (clave de ordenación). En el siguiente diagrama se ilustra lo que ocurre cuando DynamoDB escribe un elemento con un valor de clave de partición Dog y un valor de clave de ordenación Fido.

Para leer el mismo elemento de la tabla Pets, DynamoDB calcula el valor hash de Dog para obtener la partición en la que están almacenados estos elementos. A continuación, DynamoDB examina los valores de los atributos de clave de ordenación hasta que encuentra Fido.

Para leer todos los elementos cuyo valor de AnimalType es Dog, puede emitir una operación Query sin especificar una condición de clave de ordenación. De forma predeterminada, los elementos se devuelven en el orden en el que están almacenados (es decir, en orden ascendente, según su clave de ordenación). Si lo prefiere, puede solicitar que se muestren por orden descendente.

Para consultar solo algunos de los elementos Dog, puede aplicar una condición a la clave de ordenación (por ejemplo, solo los elementos Dog cuyo valor de Name comience por una letra comprendida entre la A y la K).

nota

En una tabla de DynamoDB, no existe ningún límite superior respecto al número de valores diferentes de clave de ordenación por cada valor de clave de partición. Si necesita almacenar muchos miles de millones de elementos Dog en la tabla Pets, DynamoDB asignaría almacenamiento suficiente para satisfacer este requisito automáticamente.