Prácticas recomendadas para almacenar elementos y atributos grandes en DynamoDB - Amazon DynamoDB

Prácticas recomendadas para almacenar elementos y atributos grandes en DynamoDB

Amazon DynamoDB limita el tamaño de cada uno de los elementos que se almacenan en una tabla a 400 KB (consulte Cuotas de tabla, servicio y cuenta en Amazon DynamoDB). Si la aplicación necesita almacenar más datos en un elemento de lo que permite el límite de tamaño de DynamoDB, puede intentar comprimir uno o varios atributos grandes o dividir el elemento en varios elementos (indizados eficazmente mediante claves de ordenación). También puede almacenar el elemento como un objeto de Amazon Simple Storage Service (Amazon S3) y almacenar el identificador de objeto de Amazon S3 en el elemento de DynamoDB.

Se recomienda utilizar el parámetro ReturnConsumedCapacity al escribir los elementos para monitorear y alertar sobre los tamaños de los elementos que se acerquen al límite máximo de 400 KB. Si se supera el tamaño máximo del elemento, habrá intentos de escritura fallidos. Para mitigar los problemas de tamaño de los elementos, monitoree los tamaños y emita alertas al respecto antes de que afecten a su aplicación.

Compresión de valores de atributos grandes

Si los valores de atributo grandes se comprimen, es posible que se ajusten a los límites de los elementos de DynamoDB y se reduzcan los costes de almacenamiento. Los algoritmos de compresión, como GZIP o LZO, generan una salida binaria que se puede almacenar en un tipo de atributo Binary dentro del elemento.

Por ejemplo, piense en una tabla donde se almacenan los mensajes escritos por los usuarios de un foro. Estos mensajes suelen contener largas cadenas de texto que pueden comprimirse. Si bien la compresión puede reducir el tamaño de los elementos, la desventaja es que no se pueden filtrar los valores comprimidos de los atributos.

Para ver un código de muestra en el que se ilustra cómo comprimir este tipo de mensajes en DynamoDB, consulte lo siguiente:

Particionamiento vertical

Una solución alternativa para gestionar elementos grandes es partirlos en fragmentos de datos más pequeños y asociar todos los elementos relevantes por el valor de la clave de partición. A continuación, se puede utilizar una cadena de claves de clasificación para identificar la información asociada que se almacena en ella. Al hacer esto y agrupar varios elementos por el mismo valor de clave de partición, se crea una colección de elementos.

Para obtener más información acerca de este enfoque, consulte las publicaciones del blog:

Almacenamiento de valores de atributos grandes en Amazon S3

Como se indicó anteriormente, también puede usar Amazon S3 para almacenar valores de atributos grandes que no caben en un elemento de DynamoDB. Puede almacenar estos atributos como un objeto de Amazon S3 y almacenar después el identificador del objeto en el elemento de DynamoDB.

También puede aprovechar la compatibilidad con los metadatos de objetos de Amazon S3 para proporcionar un enlace de regreso al elemento principal de DynamoDB. Almacene el valor de clave principal del elemento como metadatos de Amazon S3 del objeto en Amazon S3. Normalmente, esto contribuye positivamente al mantenimiento de los objetos de Amazon S3.

Por ejemplo, veamos la tabla ProductCatalog. En los elementos de esta tabla, se almacena información sobre el precio del elemento, su descripción, los autores (en el caso de los libros) y las dimensiones (en el caso de otros productos). Si quisiera almacenar una imagen de cada producto que fuera demasiado grande como para que cupiera en un elemento, podría almacenar las imágenes en Amazon S3 en lugar de en DynamoDB.

Si utiliza esta estrategia, tenga en cuenta lo siguiente:

  • DynamoDB no admite transacciones que atraviesen Amazon S3 y DynamoDB. Por lo tanto, la aplicación debe solventar cualquier error, que podría estar relacionado con la limpieza de objetos de Amazon S3 huérfanos.

  • Amazon S3 impone un límite sobre la longitud de los identificadores de objetos. Por tanto, debe organizar los datos de forma que no generen identificadores de objetos excesivamente largos ni infrinjan otras restricciones de Amazon S3.

Para obtener más información acerca de cómo utilizar Amazon S3, consulte la Guía del usuario de Amazon Simple Storage Service.