Etapa 6: criar consultas de dados - AWS Orientação prescritiva

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

Etapa 6: criar consultas de dados

Depois de definir seus padrões de acesso e projetar seu modelo de dados, você pode consultar dados hierárquicos no banco de dados do DynamoDB. Como prática recomendada para economizar custos e ajudar a garantir o desempenho, os exemplos a seguir usam somente a operação de consulta semScan.

  • Encontre ancestrais de um componente.

    Para encontrar os ancestrais (pai, avô, bisavô etc.) do componente CM8, consulte a tabela base usando ComponentId = "CM8". A consulta retornará o registro a seguir.

    Para reduzir o tamanho dos dados resultantes, é possível usar uma expressão de projeção para retornar somente o atributo Path.

    ComponentId

    ParentId

    GraphId

    Path

    CM8

    CM4

    CM1#1

    CM1|CM2|CM4|CM8

    Path

    CM1|CM2|CM4|CM8

    Agora, divida o caminho usando o tubo (“|”) e pegue os primeiros componentes N-1 para obter ancestrais.

    Resultado da consulta: os ancestrais de CM8 são CM1, CM2, CM4.

  • Encontre filhos imediatos de um componente.

    Para obter todos os componentes secundários imediatos ou de um nível a jusante do componente CM2, consulte GSI1 usando. ParentId = "CM2" A consulta retornará o registro a seguir.

    ParentId

    ComponentId

    CM2

    CM4

    CM5

  • Encontre todos os componentes secundários posteriores usando um componente de nível superior.

    Para obter todos os componentes secundários ou posteriores do componente CM1 de nível superior, consulte GSI2 usando GraphId = "CM1#1" e e use uma expressão de begins_with("Path", "CM1|") projeção com. ComponentId Isso retornará todos os componentes relacionados a essa árvore.

    Este exemplo tem uma única árvore, e CM1 é o componente superior. Na realidade, é possível ter milhões de componentes de nível superior na mesma tabela.

    GraphId

    ComponentId

     

    CM1#1

    CM2

    CM3

    CM4

    CM5

    CM8

    CM9

    CM10

    CM6

    CM7

  • Encontre todos os componentes secundários posteriores usando um componente de nível médio.

    Para obter todos os componentes secundários ou posteriores recursivamente para o componente CM2, você tem duas opções. É possível consultar recursivamente nível por nível ou consultar o índice GSI2.

    • Consulte GSI1, nível por nível, recursivamente, até atingir o último nível dos componentes filhos.

      1. Consulte GSI1 usando ParentId = "CM2". Isso retornará o registro a seguir.

        ParentId

        ComponentId

        CM2

        CM4

        CM5

      2. Novamente, consulte GSI1 usando ParentId = "CM4". Isso retornará o registro a seguir.

        ParentId

        ComponentId

        CM4

        CM8

        CM9

      3. Novamente, consulte GSI1 usando ParentId = "CM5". Isso retornará o registro a seguir.

        Continue o loop: consulte para cada ComponentId até chegar ao último nível. Quando uma consulta usando ParentId = "<ComponentId>" não retorna nenhum resultado, o resultado anterior pertencia ao último nível da árvore.

        ParentId

        ComponentId

        CM5

        CM10

      4. Mescle todos os resultados.

         

        resultado = [CM4, CM5] + [CM8, CM9] + [CM10]

                 = [CM4, CM5, CM8, CM9, CM10]

    • Consulte GSI2, que armazena uma árvore hierárquica para um componente de nível superior (um carro, ou CM1).

      1. Primeiro, encontre o componente de nível superior ou o ancestral superior e o Path de CM2. Para isso, consulte a tabela base usando ComponentId = "CM2" para encontrar o caminho desse componente na árvore hierárquica. Selecione os atributos GraphId e Pat h. A consulta retornará o registro a seguir.

        GraphId

        Path

        CM1#1

        CM1|CM2

      2. Consulte GSI2 usando o. GraphId = "CM1#1" AND BEGINS_WITH("Path", "CM1|CM2|") A consulta retornará os resultados a seguir.

        GraphId

        Path

        ComponentId

        CM1#1

        CM1|CM2|CM4

        CM1|CM2|CM5

        CM1|CM2|CM4|CM8

        CM1|CM2|CM4|CM9

        CM1|CM2|CM5|CM10

        CM4

        CM5

        CM8

        CM9

        CM10

      3. Selecione o atributo ComponentId para retornar todos os componentes filhos para CM2.