

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Prácticas recomendadas de modelado de datos: recomendaciones para diseñar modelos de datos
<a name="data-modeling"></a>

Un modelado de datos efectivo es esencial para optimizar el rendimiento y minimizar los costos al trabajar con Amazon Keyspaces (para Apache Cassandra). En este tema se tratan las principales consideraciones y recomendaciones para diseñar modelos de datos que se adapten a los patrones de acceso a los datos de su aplicación. 
+ **Diseño de claves de partición**: la clave de partición desempeña un papel fundamental a la hora de determinar cómo se distribuyen los datos entre las particiones de Amazon Keyspaces. La elección de una clave de partición adecuada puede afectar considerablemente al desempeño de las consultas y a los costos de rendimiento. En esta sección se analizan las estrategias para diseñar claves de partición que promuevan una distribución uniforme de la actividad de lectura y escritura entre las particiones. 
+ **Consideraciones clave:**
  + **Distribución uniforme de la actividad**: procure que la actividad de lectura y escritura sea uniforme en todas las particiones para minimizar los costos de rendimiento y aprovechar la capacidad de ampliación de forma eficaz. 
  + **Patrones de acceso**: alinee el diseño de la clave de partición con los patrones de acceso a los datos principales de la aplicación.
  + **Tamaño de la partición**: evite crear particiones que crezcan demasiado, ya que esto puede afectar al rendimiento y aumentar los costos. 

Para visualizar y diseñar modelos de datos con mayor facilidad, puede utilizar [NoSQL Workbench](workbench.md).

**Topics**
+ [Uso eficaz de las claves de partición en Amazon Keyspaces](bp-partition-key-design.md)

# Uso eficaz de las claves de partición en Amazon Keyspaces
<a name="bp-partition-key-design"></a>

La clave principal que identifica de forma exclusiva cada fila de una tabla de Amazon Keyspaces puede constar de una o varias columnas de clave de partición que determinan en qué particiones se almacenan los datos y de una o varias columnas de agrupación opcionales que definen cómo se agrupan y ordenan los datos dentro de una partición. 

Dado que la clave de partición establece el número de particiones en las que se almacenan sus datos y cómo se distribuyen los datos entre estas particiones, la forma en que elija su clave de partición puede tener un impacto significativo en el rendimiento de sus consultas. En general, debe diseñar su aplicación para que la actividad sea uniforme en todas las particiones del disco. 

Distribuir la actividad de lectura y escritura de la aplicación de manera uniforme en todas las particiones ayuda a minimizar los costos de rendimiento, y esto se aplica tanto a los modos de capacidad bajo demanda como a los de capacidad aprovisionada. read/write Por ejemplo, si utiliza el modo de capacidad aprovisionada, puede determinar los patrones de acceso que necesita su aplicación y estimar el total de unidades de capacidad de lectura (RCU) y de unidades de capacidad de escritura (WCU) que requiere cada tabla. Amazon Keyspaces respalda sus patrones de acceso utilizando el rendimiento que haya aprovisionado, siempre que el tráfico de una partición determinada no supere los 3000 y 1000. RCUs WCUs 

Cuando una partición presenta un rendimiento de lectura o escritura elevado y sostenido, en función de los patrones de tráfico, Amazon Keyspaces puede dividir automáticamente la partición en dos nuevas particiones. Cada nueva partición contiene un subconjunto de las filas de la partición original, lo que distribuye el rendimiento de manera uniforme entre ambas particiones.

Amazon Keyspaces ofrece flexibilidad adicional en su aprovisionamiento de rendimiento por partición proporcionando capacidad de ampliación. Para obtener más información, consulte [Uso eficaz de la capacidad de ampliación en Amazon Keyspaces](throughput-bursting.md).

**Topics**
+ [Uso de la partición de escritura para distribuir uniformemente las cargas de trabajo entre las particiones](bp-partition-key-sharding.md)

# Uso de la partición de escritura para distribuir uniformemente las cargas de trabajo entre las particiones
<a name="bp-partition-key-sharding"></a>

Una forma de distribuir mejor las escrituras en una partición en Amazon Keyspaces es ampliar el espacio. Esto puede hacerse de diferentes maneras. Puede añadir una columna de clave de partición adicional en la que escriba números aleatorios para distribuir las filas entre las particiones. O puede usar un número que se calcula en función de algo que esté consultando.

## Fragmentación mediante claves de partición compuestas y valores aleatorios
<a name="bp-partition-key-sharding-random"></a>

Una estrategia para distribuir cargas de forma más uniforme en una partición consiste en añadir una columna de clave de partición adicional en la que se escriben números aleatorios. De ese modo, las escrituras se distribuyen aleatoriamente por un espacio mayor.

Por ejemplo, considere la siguiente tabla que tiene una única clave de partición que representa una fecha.

```
CREATE TABLE IF NOT EXISTS tracker.blogs (
   publish_date date,
   title text,
   description int,
   PRIMARY KEY (publish_date));
```

Para distribuir de forma más uniforme esta tabla entre las particiones, podría incluir una columna de clave de partición adicional `shard` que almacene números aleatorios. Por ejemplo:

```
CREATE TABLE IF NOT EXISTS tracker.blogs (
   publish_date date, 
   shard int, 
   title text, 
   description int, 
   PRIMARY KEY ((publish_date, shard)));
```

Al insertar datos podría elegir un número aleatorio entre `1` y `200` para la columna `shard`. Esto produce valores de clave de partición compuestos como `(2020-07-09, 1)`, `(2020-07-09, 2)` y así sucesivamente hasta `(2020-07-09, 200)`. Al aplicar un número aleatorio a la clave de partición, las escrituras que se producen en la tabla de cada día se distribuyen uniformemente por varias particiones. Como resultado, se mejora el paralelismo y el rendimiento general.

Sin embargo, para leer todas las filas de un día determinado, tendría que consultar las filas de todas las particiones y luego fusionar los resultados. Por ejemplo, primero emitiría una instrucción `SELECT` para el valor de la clave de partición `(2020-07-09, 1)`. A continuación, emitiría otra instrucción `SELECT` para `(2020-07-09, 2)` y así sucesivamente hasta `(2020-07-09, 200)`. Por último, su aplicación tendría que fusionar los resultados de todas esas instrucciones `SELECT`.

## Partición mediante claves de partición compuestas y valores aleatorios
<a name="bp-partition-key-sharding-calculated"></a>

Aplicar una estrategia de aleatorización puede mejorar considerablemente el rendimiento de la escritura. Pero resulta difícil leer una fila en concreto porque no sabe qué valor se escribió en la columna `shard` al escribirse la fila. Para facilitar la lectura de filas individuales, puede utilizar una estrategia diferente. En vez de utilizar un número aleatorio para distribuir las filas entre las particiones, utilice un número que pueda calcular basándose en algo que desee consultar.

Consideremos el ejemplo anterior, en el que una tabla utiliza la fecha de hoy en la clave de partición. Supongamos ahora que cada fila tiene una columna `title` accesible y que lo más frecuente es que necesite encontrar filas por título además de por fecha. Antes de que su aplicación escriba la fila en la tabla, podría calcular un valor hash basado en el título y utilizarlo para rellenar la columna `shard`. El cálculo podría generar un número comprendido entre 1 y 200 que esté bastante bien distribuido, igual que el que se genera con la estrategia aleatoria.

Probablemente bastaría con un cálculo sencillo, como el producto de los valores de punto de código UTF-8 de los caracteres del título, módulo 200, \$1 1. El valor de la clave de partición compuesta sería entonces la combinación de la fecha y el resultado del cálculo.

Con esta estrategia, las escrituras se distribuyen de manera uniforme entre los valores de clave de partición y, por lo tanto, entre las particiones físicas. Puede realizar fácilmente una instrucción `SELECT` para una fila y una fecha en concreto porque puede calcular el valor de clave de partición para un valor `title` específico.

Para leer todas las filas de un día determinado, aún debe `SELECT` cada una de las claves `(2020-07-09, N)` (donde `N` es de 1 a 200), y su aplicación tiene entonces que fusionar todos los resultados. El beneficio es que evitaría que un único valor de clave de partición caliente acaparase toda la carga de trabajo.