Tablas, elementos y claves principales
Diseñe tablas de DynamoDB con claves de partición y claves principales compuestas, y comprenda los límites de almacenamiento por elemento.
Tablas, elementos y claves principales es una lección gratuita de AWS Solutions Architect en CoddyKit. Esta es la lección 1 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de AWS Solutions Architect, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de AWS Solutions Architect incluye 4 lecciones en total.
DynamoDB: almacén de clave-valor NoSQL
Amazon DynamoDB es una base de datos de documentos y clave-valor sin servidor y totalmente administrada, diseñada para ofrecer un rendimiento de milisegundos de un solo dígito a cualquier escala. A diferencia de las bases de datos relacionales, DynamoDB no exige un esquema: cada elemento puede tener un conjunto diferente de atributos, siempre que incluya la clave principal.
DynamoDB almacena los datos en tablas, que son el contenedor de nivel superior análogo a una tabla SQL. Las tablas se distribuyen automáticamente entre varios nodos de almacenamiento en distintas AZ, lo que proporciona redundancia integrada sin que usted tenga que realizar ninguna configuración.
Tablas y elementos
Una tabla de DynamoDB contiene una colección de elementos, cada uno de los cuales es una colección de atributos. Los atributos son valores tipados: String (S), Number (N), Binary (B), Boolean (BOOL), Null (NULL), List (L), Map (M) y tipos Set (SS, NS, BS).
Cada elemento de una tabla debe incluir los atributos de la clave principal; todos los demás atributos son opcionales y pueden variar entre elementos. Un solo elemento puede tener un tamaño máximo de 400 KB, incluidos todos los nombres y valores de sus atributos.
# Example DynamoDB item structure (JSON)
{
'UserId': {'S': 'user-abc-123'},
'Timestamp': {'N': '1719000000'},
'Username': {'S': 'alice'},
'Score': {'N': '4200'},
'Tags': {'SS': ['premium', 'verified']}
}Clave principal simple: solo clave de partición
Una clave principal simple consta de un único atributo denominado clave de partición (también llamada clave hash). DynamoDB aplica una función hash interna al valor de la clave de partición para determinar qué partición de almacenamiento contiene el elemento. Todos los elementos con el mismo valor de clave de partición se almacenan juntos.
Con una clave principal simple, ningún elemento de la tabla puede tener el mismo valor de clave de partición que otro: dicho valor identifica de forma única cada elemento. Este diseño es adecuado para tablas en las que siempre se accede a los datos mediante un identificador único, como un ID de usuario o un ID de pedido.
# Create a table with a simple (partition key only) primary key
aws dynamodb create-table \
--table-name Users \
--attribute-definitions AttributeName=UserId,AttributeType=S \
--key-schema AttributeName=UserId,KeyType=HASH \
--billing-mode PAY_PER_REQUESTClave principal compuesta: clave de partición y clave de ordenación
Una clave principal compuesta utiliza tanto una clave de partición como una clave de ordenación (también llamada clave de rango). Los elementos con la misma clave de partición se almacenan juntos y se ordenan por el valor de la clave de ordenación, lo que permite realizar consultas por rangos dentro de una partición.
Este diseño es extremadamente flexible: varios elementos pueden compartir la misma clave de partición siempre que sus claves de ordenación sean diferentes. Por ejemplo, una tabla Orders podría utilizar CustomerId como clave de partición y OrderDate como clave de ordenación, lo que permitiría consultar todos los pedidos de un cliente ordenados por fecha.
# Create a table with a composite primary key
aws dynamodb create-table \
--table-name Orders \
--attribute-definitions \
AttributeName=CustomerId,AttributeType=S \
AttributeName=OrderDate,AttributeType=S \
--key-schema \
AttributeName=CustomerId,KeyType=HASH \
AttributeName=OrderDate,KeyType=RANGE \
--billing-mode PAY_PER_REQUESTDiseño de claves de partición y particiones saturadas
Elegir la clave de partición adecuada es la decisión de diseño más importante en DynamoDB. Una buena clave de partición tiene una alta cardinalidad (muchos valores distintos) y distribuye el acceso de forma uniforme entre las particiones. Las malas elecciones provocan particiones saturadas, en las que una partición recibe un tráfico desproporcionado y causa limitación de solicitudes.
Patrones que debe evitar: utilizar un indicador booleano (solo dos valores), una fecha que agrupe todas las escrituras de hoy o un campo de estado con baja cardinalidad. Buenas opciones: ID de usuario, ID de dispositivo, UUID aleatorio o valores compuestos como tenantId#entityType.
PutItem, GetItem y DeleteItem
Las tres operaciones fundamentales sobre elementos de DynamoDB son:
- PutItem: escribe un elemento nuevo o reemplaza por completo uno existente con la misma clave principal
- GetItem: recupera un único elemento mediante su clave principal exacta (requiere la clave completa: la clave de partición y, si es compuesta, la clave de ordenación)
- DeleteItem: elimina un elemento mediante su clave principal exacta
Las tres operaciones son atómicas a nivel de elemento. De forma predeterminada, GetItem utiliza lecturas eventualmente consistentes; añadir --consistent-read fuerza una lectura fuertemente consistente que siempre devuelve el valor escrito más recientemente.
# PutItem
aws dynamodb put-item \
--table-name Users \
--item '{"UserId":{"S":"user-123"},"Name":{"S":"Alice"}}'
# GetItem
aws dynamodb get-item \
--table-name Users \
--key '{"UserId":{"S":"user-123"}}' \
--consistent-readUpdateItem y expresiones condicionales
UpdateItem modifica atributos específicos de un elemento existente sin reemplazarlo por completo, a diferencia de PutItem. Puede añadir o eliminar atributos, o realizar operaciones aritméticas atómicas sobre atributos Number (por ejemplo, incrementar un contador).
Las expresiones condicionales le permiten especificar que una operación solo debe realizarse correctamente si se cumple una condición. Por ejemplo, puede actualizar el estado de un elemento solo si actualmente es PENDING. Esto permite implementar patrones de bloqueo optimista sin transacciones y constituye una técnica de diseño fundamental de DynamoDB.
# Atomically increment a counter, only if item exists
aws dynamodb update-item \
--table-name Orders \
--key '{"CustomerId":{"S":"c-123"},"OrderDate":{"S":"2026-06-20"}}' \
--update-expression 'SET ItemCount = ItemCount + :inc' \
--condition-expression 'attribute_exists(CustomerId)' \
--expression-attribute-values '{":inc":{"N":"1"}}'Query frente a Scan
Query recupera los elementos que comparten el mismo valor de clave de partición, aplicando opcionalmente filtros sobre las condiciones de la clave de ordenación. Query es eficiente: solo lee la partición seleccionada. Puede utilizar condiciones de la clave de ordenación como begins_with, between, =, < y > para limitar los resultados dentro de la partición.
Scan lee todos los elementos de la tabla y, después, aplica una expresión de filtro opcional. Los escaneos son costosos en tablas grandes y deben evitarse en los patrones de consulta de producción. Si necesita realizar Scan con frecuencia, reconsidere el diseño de la tabla o añada un índice secundario global.
# Query: get all orders for customer c-123 after a date
aws dynamodb query \
--table-name Orders \
--key-condition-expression 'CustomerId = :cid AND OrderDate >= :dt' \
--expression-attribute-values \
'{":cid":{"S":"c-123"},":dt":{"S":"2026-01-01"}}'Lecturas fuertemente consistentes frente a lecturas eventualmente consistentes
DynamoDB almacena tres copias de sus datos en varias AZ. Las lecturas eventualmente consistentes (la opción predeterminada) pueden devolver un valor ligeramente desactualizado si una escritura reciente aún no se ha propagado a todas las copias, pero consumen la mitad de las unidades de capacidad de lectura que las lecturas fuertemente consistentes.
Las lecturas fuertemente consistentes siempre devuelven la escritura confirmada más reciente, pero cuestan el doble de RCUs y no están disponibles en los Global Secondary Indexes. Elija lecturas eventualmente consistentes para cargas de trabajo con un alto rendimiento y predominio de lecturas, y lecturas fuertemente consistentes solo cuando su aplicación necesite los datos más recientes.
Transacciones de DynamoDB
DynamoDB admite transacciones ACID mediante TransactWriteItems y TransactGetItems. Una transacción puede agrupar hasta 100 operaciones de escritura en varios elementos e incluso en varias tablas, lo que garantiza que todas se completen correctamente o que todas se reviertan de forma atómica.
Utilice transacciones en situaciones como transferir dinero entre cuentas (cargar un elemento y abonar otro) o reservar un asiento (comprobar la disponibilidad y reservarlo de forma atómica). Las transacciones cuestan el doble de las RCUs/WCUs normales, por lo que debe utilizarlas solo cuando realmente se necesite atomicidad entre varios elementos.
Límite de tamaño de los elementos y consejos de modelado de datos
El límite de 400 KB por elemento de DynamoDB influye en el modelado de datos. Para cargas útiles grandes (por ejemplo, imágenes o documentos grandes), almacene los datos binarios en S3 y guarde únicamente la clave del objeto de S3 en DynamoDB. Para datos jerárquicos profundamente anidados, modele cada tipo de nodo con su propio patrón de clave de partición mediante el diseño de tabla única: una tabla contiene varios tipos de entidades, diferenciados por el prefijo de la clave de partición y el patrón de la clave de ordenación.
El diseño de tabla única minimiza el número de tablas y permite patrones de acceso eficientes al colocar los elementos relacionados en la misma partición. Es una técnica avanzada que reduce la carga operativa y mejora el rendimiento en patrones de acceso complejos.
Comprobación rápida
Compruebe su comprensión de los conceptos de AWS Solutions Architect (SAA-C03) de esta lección.
Resumen de la lección
En esta lección ha aprendido que: las tablas de DynamoDB contienen elementos sin esquema limitados a 400 KB; las claves principales simples utilizan únicamente una clave de partición, mientras que las claves compuestas añaden una clave de ordenación para las consultas por rango; y las claves de partición con alta cardinalidad evitan las particiones saturadas. Utilice Query en lugar de Scan para acceder a los datos de forma eficiente. A continuación, exploraremos los modos de capacidad aprovisionada y bajo demanda.
Aprende AWS Solutions Architect con un tutor de IA — gratis
Escribe y ejecuta código real en tu navegador, obtén ayuda instantánea de un tutor de IA disponible 24/7 y continúa donde lo dejaste en la web o en la aplicación.
- Cursos
- 30
- Lecciones
- 120
Preguntas frecuentes
¿La lección «Tablas, elementos y claves principales» es gratis?
Sí — el texto completo de «Tablas, elementos y claves principales» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de AWS Solutions Architect, actualiza a CoddyKit PRO. El curso de AWS Solutions Architect incluye 4 lecciones en total.
¿Qué aprenderé en «Tablas, elementos y claves principales»?
Diseñe tablas de DynamoDB con claves de partición y claves principales compuestas, y comprenda los límites de almacenamiento por elemento. Practicas AWS Solutions Architect con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar AWS Solutions Architect?
No se requiere experiencia previa. AWS Solutions Architect en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 1 de 4.
¿Cuánto tiempo toma la lección «Tablas, elementos y claves principales»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de AWS Solutions Architect?
Sí. Cada lección de AWS Solutions Architect incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Tablas, elementos y claves principales
- Capacidad aprovisionada frente a bajo demanda
- Índices secundarios globales e índices secundarios locales
- DynamoDB Streams y tablas globales