

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Melhores práticas de modelagem de dados: recomendações para projetar modelos de dados
<a name="data-modeling"></a>

A modelagem de dados eficaz é crucial para otimizar o desempenho e minimizar os custos ao trabalhar com o Amazon Keyspaces (para Apache Cassandra). Este tópico aborda as principais considerações e recomendações para criar modelos de dados que se adequem aos padrões de acesso aos dados do seu aplicativo. 
+ **Design da chave de partição**: a chave de partição desempenha um papel fundamental na determinação de como os dados são distribuídos entre as partições no Amazon Keyspaces. A escolha de uma chave de partição apropriada pode afetar significativamente o desempenho da consulta e os custos de throughput. Esta seção discute estratégias para criar chaves de partição que promovam a distribuição uniforme da atividade de leitura e gravação entre partições. 
+ **Considerações importantes:**
  + **Distribuição uniforme de atividades: busque uma atividade** uniforme de leitura e gravação em todas as partições para minimizar os custos de throughput e aproveitar a capacidade de expansão de forma eficaz. 
  + **Padrões de acesso**: alinhe o design da chave de partição com os padrões primários de acesso aos dados do seu aplicativo.
  + **Tamanho da partição**: evite criar partições muito grandes, pois isso pode afetar o desempenho e aumentar os custos. 

Para visualizar e projetar modelos de dados com mais facilidade, você pode usar o [NoSQL Workbench](workbench.md).

**Topics**
+ [Como usar chaves de partição de forma eficaz no Amazon Keyspaces](bp-partition-key-design.md)

# Como usar chaves de partição de forma eficaz no Amazon Keyspaces
<a name="bp-partition-key-design"></a>

A chave primária que identifica exclusivamente cada linha em uma tabela do Amazon Keyspaces pode consistir em uma ou várias colunas de chave de partição, que determinam em quais partições os dados são armazenados, e uma ou mais colunas de cluster opcionais, que definem como os dados são agrupados e classificados dentro de uma partição. 

Como a chave de partição estabelece o número de partições em que seus dados são armazenados e como os dados são distribuídos entre essas partições, a forma como você escolhe sua chave de partição pode ter um impacto significativo no desempenho de suas consultas. Em geral, seu aplicativo deve ser projetado para ter uma atividade uniforme em todas as partições no disco. 

Distribuir uniformemente a atividade de leitura e gravação de seu aplicativo em todas as partições ajuda a minimizar os custos de taxa de transferência, e isso se aplica tanto aos modos de capacidade sob demanda quanto aos modos de capacidade provisionada. read/write Por exemplo, se você estiver usando o modo de capacidade provisionada, é possível determinar os padrões de acesso que o aplicativo precisa e estimar o total de unidades de capacidade de leitura (RCU) e unidades de capacidade de gravação (WCU) que cada tabela requer. O Amazon Keyspaces suporta seus padrões de acesso usando a taxa de transferência que você provisionou, desde que o tráfego em uma determinada partição não exceda 3.000 e 1.000. RCUs WCUs 

Quando uma partição experimenta uma alta taxa de transferência sustentada de leitura ou gravação, dependendo dos padrões de tráfego, o Amazon Keyspaces pode dividir automaticamente a partição em duas novas partições. Cada nova partição contém um subconjunto das linhas da partição original, distribuindo a taxa de transferência uniformemente em ambas as partições.

O Amazon Keyspaces oferece flexibilidade adicional no provisionamento de throughput por partição ao oferecer capacidade de expansão. Para obter mais informações, consulte [Use a capacidade de expansão de forma eficaz no Amazon Keyspaces](throughput-bursting.md).

**Topics**
+ [Use fragmentação de gravação para distribuir uniformemente as workloads entre as partições](bp-partition-key-sharding.md)

# Use fragmentação de gravação para distribuir uniformemente as workloads entre as partições
<a name="bp-partition-key-sharding"></a>

Uma forma de distribuir melhor as gravações por uma partição no Amazon Keyspaces é aumentar o espaço. É possível fazer isso de várias formas diferentes. Você pode adicionar uma coluna de chave de partição adicional na qual você grava números randomizados para distribuir as linhas entre as partições. Ou pode usar um número calculado com base em algo que você está consultando.

## Fragmentação usando chaves de partição compostas e valores randomizados
<a name="bp-partition-key-sharding-random"></a>

Uma estratégia para distribuir cargas de forma mais uniforme em uma partição é adicionar uma coluna de chave de partição adicional na qual você grava números randomizados. Então, você randomiza as gravações no espaço maior.

Por exemplo, considere a tabela a seguir, que tem uma única chave de partição representando uma data.

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

Para distribuir mais uniformemente essa tabela entre as partições, você pode incluir uma coluna adicional de chave de partição `shard` que armazene números randomizados. Por exemplo:

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

Ao inserir dados, escolha um número randomizado entre `1` e `200` para a coluna `shard`. Isso produz valores de chave de partição compostos como `(2020-07-09, 1)`, `(2020-07-09, 2)` e assim por diante, até `(2020-07-09, 200)`. Como você está randomizando a chave de partição, as gravações na tabela em cada dia são espalhadas uniformemente entre várias partições. Isso resulta em melhor paralelismo e throughput geral mais alto.

Contudo, para ler todas as linhas de um determinado dia, você teria que consultar as linhas quanto a todos os fragmentos e mesclar os resultados. Por exemplo, você primeiro emite uma instrução de `SELECT` do valor da chave de partição `(2020-07-09, 1)`. Depois emite outra instrução `SELECT` de `(2020-07-09, 2)`, e assim por diante, por meio de `(2020-07-09, 200)`. Por fim, seu aplicativo precisaria mesclar os resultados de todas essas instruções `SELECT`.

## Fragmentação usando chaves de partição compostas e valores calculados
<a name="bp-partition-key-sharding-calculated"></a>

Uma estratégia de randomização pode melhorar bastante o throughput de gravação. Mas é difícil ler uma linha específica porque você não sabe qual valor foi gravado na coluna `shard` quando a linha foi gravada. Para facilitar a leitura de linhas individuais, você pode usar uma estratégia diferente. Em vez de usar um número aleatório para distribuir as linhas entre as partições, use um número calculado com base em algo que você deseja consultar.

Considere o exemplo anterior, em que uma tabela usa a data de hoje na chave de partição. Agora considere que cada linha conta com uma coluna `title` acessível e que você precisa com frequência de localizar as linhas pelo título, além da data. Antes de seu aplicativo gravar a linha na tabela, ele pode calcular um valor de hash com base no título e usá-lo para preencher a coluna `shard`. O cálculo pode gerar um número entre 1 e 200 que é distribuído uniformemente, semelhante à estratégia aleatória.

Bastaria um cálculo simples, como o produto dos valores de pontos de código UTF-8 para os caracteres no título, módulo 200, \$1 1. O valor da chave de partição composta seria então a combinação da data e do resultado do cálculo.

Com essa estratégia, as gravações são distribuídas uniformemente entre os valores de chaves de partição e, portanto, entre as partições físicas. É possível executar uma instrução `SELECT` facilmente para uma determinada linha e data, pois você pode calcular o valor de chave da partição de um valor `title` específico.

Para ler todos as linhas de um determinado dia, você ainda precisa realizar uma operação `SELECT` em cada uma das chaves `(2020-07-09, N)` (em que `N` é de 1 a 200), e sua aplicação então deve mesclar todos os resultados. O benefício é evitar de ter um valor de chave de partição "hot" único consumindo toda a carga de trabalho.