DynamoDB: prácticas recomendadas
Ciertas prácticas optimizan el código, evitan errores y minimizan el costo de rendimiento cuando se trabaja con diversas fuentes y elementos.
Las siguientes son algunas de las mejores prácticas más importantes y más utilizadas en DynamoDB.
Mesas
La distribución de tablas significa que los mejores enfoques distribuyen la actividad de lectura / escritura de manera uniforme en todos los elementos de la tabla.
Apunte a un acceso uniforme a los datos en los elementos de la tabla. El uso óptimo del rendimiento se basa en la selección de la clave principal y los patrones de carga de trabajo del elemento. Distribuya la carga de trabajo de manera uniforme entre los valores de clave de partición. Evite cosas como una pequeña cantidad de valores de clave de partición muy utilizados. Opte por mejores opciones, como grandes cantidades de valores de clave de partición distintos.
Obtenga una comprensión del comportamiento de las particiones. Estime las particiones asignadas automáticamente por DynamoDB.
DynamoDB ofrece un uso de rendimiento en ráfagas, que reserva el rendimiento no utilizado para “ráfagas” de energía. Evite el uso intensivo de esta opción porque las ráfagas consumen grandes cantidades de rendimiento rápidamente; además, no demuestra ser un recurso confiable.
En las cargas, distribuya los datos para lograr un mejor rendimiento. Implemente esto cargando a todos los servidores asignados al mismo tiempo.
Almacene en caché los elementos que se utilizan con frecuencia para descargar la actividad de lectura en la caché en lugar de en la base de datos.
Artículos
Los costos de limitación, rendimiento, tamaño y acceso siguen siendo las mayores preocupaciones con los artículos. Opte por tablas de uno a varios. Elimine atributos y divida tablas para que coincidan con los patrones de acceso. Puede mejorar la eficiencia drásticamente a través de este sencillo enfoque.
Comprima valores grandes antes de almacenarlos. Utilice herramientas de compresión estándar. Utilice almacenamiento alternativo para valores de atributos grandes, como S3. Puede almacenar el objeto en S3 y un identificador en el artículo.
Distribuya grandes atributos en varios artículos a través de piezas de artículos virtuales. Esto proporciona una solución para las limitaciones del tamaño del artículo.
Consultas y escaneos
Las consultas y los escaneos sufren principalmente desafíos de consumo de rendimiento. Evite las ráfagas, que normalmente resultan de cosas como cambiar a una lectura muy consistente. Utilice exploraciones paralelas de una manera de bajos recursos (es decir, función en segundo plano sin limitación). Además, utilícelos solo con tablas grandes, y las situaciones en las que no utiliza completamente el rendimiento o las operaciones de escaneo ofrecen un rendimiento deficiente.
Índices secundarios locales
Los índices presentan problemas en las áreas de rendimiento y costos de almacenamiento, y la eficiencia de las consultas. Evite la indexación a menos que consulte los atributos con frecuencia. En las proyecciones, elija sabiamente porque inflan los índices. Seleccione solo aquellos muy utilizados.
Utilice índices dispersos, es decir, índices en los que las claves de clasificación no aparecen en todos los elementos de la tabla. Benefician las consultas sobre atributos que no están presentes en la mayoría de los elementos de la tabla.
Preste atención a la expansión de la colección de elementos (todos los elementos de la tabla y sus índices). Las operaciones de agregar / actualizar hacen que tanto las tablas como los índices crezcan, y 10 GB sigue siendo el límite para las colecciones.
Índices secundarios globales
Los índices presentan problemas en las áreas de rendimiento y costos de almacenamiento, y la eficiencia de las consultas. Opte por la distribución de atributos clave, que como la distribución de lectura / escritura en tablas proporciona uniformidad en la carga de trabajo. Elija atributos que distribuyan los datos de manera uniforme. Además, utilice índices dispersos.
Aproveche los índices secundarios globales para búsquedas rápidas en consultas que soliciten una cantidad modesta de datos.