

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á.

# Controle de versão de fontes de dados do DynamoDB no AWS AppSync
<a name="versioned-data-sources"></a>

AWS AppSync atualmente oferece suporte ao controle de versão nas fontes de dados do DynamoDB. As operações de Detecção de conflitos, Resolução de conflitos e Sincronização exigem uma fonte de dados `Versioned`. Quando você ativa o controle de versão em uma fonte de dados, AWS AppSync automaticamente:
+ Melhora os itens com metadados de versionamento de objetos.
+ Registre as alterações feitas em itens com AWS AppSync mutações em uma tabela *Delta*.
+ Mantém, por um período de tempo configurável, itens excluídos na tabela *Base* com uma “marca de exclusão”.

## Configuração de fonte de dados versionada
<a name="versioned-data-source-configuration"></a>

Ao habilitar o versionamento em uma fonte de dados do DynamoDB, especifique os seguintes campos:

** `BaseTableTTL` **  
O número de minutos para reter itens excluídos na tabela *Base* com uma “marca de exclusão” - um campo de metadados indicando que o item foi excluído. Você pode definir esse valor como *0* se quiser que os itens sejam removidos imediatamente quando excluídos. Este campo é obrigatório.

** `DeltaSyncTableName` **  
O nome da tabela em que as alterações feitas nos itens com AWS AppSync mutações são armazenadas. Este campo é obrigatório.

** `DeltaSyncTableTTL` **  
O número de minutos para reter itens na tabela *Delta* . Este campo é obrigatório.

## Registro em log de tabela de sincronização Delta
<a name="delta-sync-table"></a>

AWS AppSync atualmente oferece suporte ao Delta Sync Logging para mutações usando `PutItem``UpdateItem`, e operações `DeleteItem` do DynamoDB.

Quando uma AWS AppSync mutação altera um item em uma fonte de dados versionada, um registro dessa alteração será armazenado em uma tabela *Delta* otimizada para atualizações incrementais. Você pode optar por usar tabelas *Delta* diferentes (por exemplo, uma por tipo, uma por área de domínio) para outras fontes de dados versionadas ou uma única tabela *Delta* para sua API. AWS AppSync recomenda não usar uma única tabela *Delta* para várias, APIs a fim de evitar a colisão de chaves primárias.

O esquema necessário para esta tabela é o seguinte:

** `ds_pk` **  
Um valor de string que é usado como chave de partição. Ele é estruturado ao concatenar o nome da fonte de dados *Base* e o formato ISO8601 da data em que a alteração ocorreu (por exemplo, `Comments:2019-01-01`)  
*Quando o `customPartitionKey` sinalizador do modelo de mapeamento VTL é definido como o nome da coluna da chave de partição (consulte [Resolver Mapping Template Reference for](https://docs.aws.amazon.com/appsync/latest/devguide/resolver-mapping-template-reference-dynamodb.html#aws-appsync-resolver-mapping-template-reference-dynamodb-updateitem) DynamoDB *AWS AppSync no Developer* Guide), o formato `ds_pk` das alterações e a string são criados anexando a ela o valor da chave de partição no novo registro na tabela Base.* Por exemplo, se o registro na tabela *Base* tiver um valor de chave de partição `1a` e um valor de chave de classificação de `2b`, o novo valor da string será: `Comments:2019-01-01:1a`.

** `ds_sk` **  
Um valor de string que é usado como chave de classificação. Ele é estruturado ao concatenar o formato ISO 8601 do momento em que a alteração ocorreu, a chave primária e a versão do item. A combinação desses campos garante exclusividade para cada entrada na tabela *Delta* (por exemplo, para o horário de `09:30:00`, um ID `1a` e a versão `2`, isso seria `09:30:00:1a:2`).  
*Quando o `customPartitionKey` sinalizador do modelo de mapeamento VTL é definido como o nome da coluna da chave de partição (consulte [Resolver Mapping Template Reference for](https://docs.aws.amazon.com/appsync/latest/devguide/resolver-mapping-template-reference-dynamodb.html#aws-appsync-resolver-mapping-template-reference-dynamodb-updateitem) DynamoDB *AWS AppSync no Developer* Guide), o formato `ds_sk` das alterações e a string são criados substituindo o valor da chave de combinação pelo valor da chave de classificação na tabela base.* No exemplo anterior, se o registro na tabela *Base* tiver um valor de chave de partição de `1a` e um valor de chave de classificação de `2b`, o novo valor da string será: `09:30:00:2b:3`.

** `_ttl` **  
Um valor numérico que armazena o timestamp, em segundos de epoch, quando um item deve ser removido da tabela *Delta*. Esse valor é determinado pela adição do valor `DeltaSyncTableTTL` configurado na fonte de dados no momento em que a alteração ocorreu. Esse campo deve ser configurado como o Atributo TTL do DynamoDB.

O perfil do IAM do IAM configurada para uso com a tabela *Base* também deve conter permissão para operar na tabela *Delta*. Neste exemplo, a política de permissões para uma tabela *Base* chamada `Comments` e uma tabela *Delta* chamada `ChangeLog` é exibida:

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "dynamodb:DeleteItem",
                "dynamodb:GetItem",
                "dynamodb:PutItem",
                "dynamodb:Query",
                "dynamodb:Scan",
                "dynamodb:UpdateItem"
            ],
            "Resource": [
                "arn:aws:dynamodb:us-east-1:000000000000:table/Comments",
                "arn:aws:dynamodb:us-east-1:000000000000:table/Comments/*",
                "arn:aws:dynamodb:us-east-1:000000000000:table/ChangeLog",
                "arn:aws:dynamodb:us-east-1:000000000000:table/ChangeLog/*"
            ]
        }
    ]
}
```

------

## Metadados de fonte de dados versionada
<a name="versioned-data-source-metadata"></a>

AWS AppSync gerencia campos de metadados em fontes `Versioned` de dados em seu nome. Modificar esses campos por conta própria pode causar erros no aplicativo ou a perda de dados. Estes campos incluem:

** `_version` **  
Um contador que aumenta monotonicamente e é atualizado sempre que ocorre uma alteração em um item.

** `_lastChangedAt` **  
Um valor numérico que armazena o timestamp, em milésimos de segundos de epoch, quando um item é modificado pela última vez.

** `_deleted` **  
Um valor booliano de “marca de exclusão” que indica que um item foi excluído. Isso pode ser usado por aplicativos para expulsar itens excluídos de armazenamentos de dados locais.

** `_ttl` **  
Um valor numérico que armazena o timestamp, em segundos de epoch, quando um item deve ser removido da fonte de dados subjacente.

** `ds_pk` **  
Um valor de string que é usado como chave de partição para tabelas *Delta*.

** `ds_sk` **  
Um valor de string que é usado como chave de classificação para tabelas *Delta*.

**`gsi_ds_pk`**  
Um atributo de valor de string gerado para oferecer suporte a um índice secundário global como chave de partição. *Ele será incluído somente se os `populateIndexFields` sinalizadores `customPartitionKey` e estiverem habilitados no modelo de mapeamento VTL (consulte [Resolver Mapping Template Reference for DynamoDB no Developer Guide)](https://docs.aws.amazon.com/appsync/latest/devguide/resolver-mapping-template-reference-dynamodb.html#aws-appsync-resolver-mapping-template-reference-dynamodb-updateitem).AWS AppSync * Se ativado, o valor será estruturado concatenando o nome da fonte de dados *Base* e o formato ISO 8601 da data em que a alteração ocorreu (por exemplo, se a tabela *Base* for chamada de *Comentários*, esse registro será definido como `Comments:2019-01-01`).

**`gsi_ds_sk`**  
Um atributo de valor de string gerado para oferecer suporte a um índice secundário global como chave de classificação. *Ele será incluído somente se os `populateIndexFields` sinalizadores `customPartitionKey` e estiverem habilitados no modelo de mapeamento VTL (consulte [Resolver Mapping Template Reference for DynamoDB no Developer Guide)](https://docs.aws.amazon.com/appsync/latest/devguide/resolver-mapping-template-reference-dynamodb.html#aws-appsync-resolver-mapping-template-reference-dynamodb-updateitem).AWS AppSync * Se ativado, o valor será construído concatenando o formato ISO 8601 da hora em que a alteração ocorreu, a chave de partição do item na tabela *Base*, a chave de classificação do item na tabela *Base* e a versão do item (por exemplo, para o horário de `09:30:00`, um valor de chave de partição de `1a`, um valor de chave de classificação `2b` e a versão de `3`, isso resultaria em `09:30:00:1a#2b:3`).

Esses campos de metadados afetarão o tamanho geral dos itens na fonte de dados subjacente. AWS AppSync recomenda reservar mais de *500 bytes ou mais do tamanho máximo da chave primária* de armazenamento para metadados de fonte de dados versionados ao projetar seu aplicativo. Para usar esses metadados em aplicativos cliente, inclua os campos `_version`, `_lastChangedAt` e `_deleted` nos tipos do GraphQL e no conjunto de seleção para mutações.