Etapa 5: Criar um modelo de dados do DynamoDB
Defina as chaves de partição para sua tabela base e índices secundários globais (GSIs):
-
Seguindo as práticas recomendadas de design de chaves, use
ComponentIdcomo a chave de partição para a tabela base neste exemplo. Por ser único,ComponentIdpode oferecer granularidade. O DynamoDB usa o valor de hash da sua chave de partição para determinar a partição em que os dados são armazenados fisicamente. O ID exclusivo do componente gera um valor de hash diferente, o que pode facilitar a distribuição dos dados dentro da tabela. É possível consultar a tabela base usando uma chave de partiçãoComponentId. -
Para encontrar filhos imediatos de um componente, crie um GSI em que
ParentIdé a chave de partição eComponentIdé a chave de classificação. É possível consultar esse GSI usandoParentIdcomo a chave de partição. -
Para todos os filhos recursivos de um componente, crie um GSI em que
GraphIdé a chave de partição, ePathé a chave de classificação. É possível consultar esse GSI usandoGraphIdcomo a chave de partição e o operadorBEGINS_WITH(Path, "$path")na chave de classificação.
Chave de partição |
Chave de classificação |
Atributos de mapeamento |
|
Tabela base |
|
|
|
GSI1 |
|
|
|
GSI2 |
|
|
|
Armazenar componentes na tabela
A próxima etapa é armazenar cada componente na tabela base do DynamoDB. Depois de inserir todos os componentes da árvore de exemplo, você obtém a seguinte tabela base.
ComponentId |
ParentId |
GraphId |
Path |
CM1 |
CM1#1 |
CM1 |
|
CM2 |
CM1 |
CM1#1 |
CM1|CM2 |
CM3 |
CM1 |
CM1#1 |
CM1|CM3 |
CM4 |
CM2 |
CM1#1 |
CM1|CM2|CM4 |
CM5 |
CM2 |
CM1#1 |
CM1|CM2|CM5 |
CM6 |
CM3 |
CM1#1 |
CM1|CM3|CM6 |
CM7 |
CM3 |
CM1#1 |
CM1|CM3|CM7 |
CM8 |
CM4 |
CM1#1 |
CM1|CM2|CM4|CM8 |
CM9 |
CM4 |
CM1#1 |
CM1|CM2|CM4|CM9 |
CM10 |
CM5 |
CM1#1 |
CM1|CM2|CM5|CM10 |
O índice GSI1
Para verificar todos os filhos imediatos de um componente, crie um índice usando ParentId como chave de partição e ComponentId como chave de classificação. A tabela dinâmica a seguir representa o índice GSI1. Esse índice pode ser usado para recuperar todos os componentes filhos imediatos por meio de um ID de componente pai. Por exemplo, é possível descobrir quantas baterias estão disponíveis em um carro (CM1) ou quais células estão disponíveis em um módulo (CM4).
ParentId |
ComponentId |
CM1 |
CM2 CM3 |
CM2 |
CM4 CM5 |
CM3 |
CM6 CM7 |
CM4 |
CM8 CM9 |
CM5 |
CM10 |
O índice GSI2
A tabela dinâmica a seguir representa o índice GSI2. Ela é configurada usando-se GraphId como uma chave de partição ePath como uma chave de classificação. Ao usar GraphId e a operação begins_with na chave de classificação (Path), é possível encontrar a linhagem completa de um componente em uma árvore.
GraphId |
Path |
ComponentId |
CM1#1 |
CM1 CM1|CM2 CM1|CM3 CM1|CM2|CM4 CM1|CM2|CM5 CM1|CM2|CM4|CM8 CM1|CM2|CM4|CM9 CM1|CM2|CM5|CM10 CM1|CM3|CM6 CM1|CM3|CM7 |
CM1 CM2 CM3 CM4 CM5 CM8 CM9 CM10 CM6 CM7 |