6단계: 데이터 쿼리 생성 - AWS 권장 가이드

6단계: 데이터 쿼리 생성

액세스 패턴을 정의하고 데이터 모델을 설계한 후에는 DynamoDB 데이터베이스에서 계층적 데이터를 쿼리할 수 있습니다. 비용을 절감하고 성능을 보장하기 위한 모범 사례로, 다음 예제에서는 Scan 없이 쿼리 작업만 사용합니다.

  • 구성 요소의 상위 항목을 찾습니다.

    CM8 구성 요소의 상위 항목(상위, 차상위, 최상위 등)을 찾으려면 ComponentId = "CM8"을 사용하여 기본 테이블을 쿼리합니다. 쿼리는 다음 레코드를 반환합니다.

    결과 데이터의 크기를 줄이려면 프로젝션 표현식을 사용하여 Path 속성만 반환합니다.

    ComponentId

    ParentId

    GraphId

    경로

    CM8

    CM4

    CM1#1

    CM1|CM2|CM4|CM8

    경로

    CM1|CM2|CM4|CM8

    이제 파이프('|')를 사용하여 경로를 분할하고 첫 번째 N-1 구성 요소를 가져와서 상위 항목을 구합니다.

    쿼리 결과: CM8의 상위 항목은 CM1, CM2, CM4입니다.

  • 구성 요소의 직계 하위 항목을 찾기

    CM2 구성 요소의 모든 직계 하위 항목, 즉 한 단계 다운스트림 구성 요소를 가져오려면 ParentId = "CM2"를 사용하여 GSI1을 쿼리합니다. 쿼리는 다음 레코드를 반환합니다.

    ParentId

    ComponentId

    CM2

    CM4

    CM5

  • 최상위 구성 요소를 사용하여 모든 다운스트림 하위 구성 요소를 찾습니다.

    최상위 구성 요소 CM1에 대한 모든 하위 항목 또는 다운스트림 구성 요소를 구하려면 GraphId = "CM1#1"begins_with("Path", "CM1|")을 사용하여 GSI2를 쿼리하고 ComponentId와 함께 프로젝션 표현식을 사용합니다. 해당 트리와 관련된 모든 구성 요소가 반환됩니다.

    이 예제에는 최상위 구성 요소가 CM1인 단일 트리가 있습니다. 실제로는 동일한 테이블에 최상위 구성 요소가 수백만 개 있을 수 있습니다.

    GraphId

    ComponentId

     

    CM1#1

    CM2

    CM3

    CM4

    CM5

    CM8

    CM9

    CM10

    CM6

    CM7

  • 중간 수준 구성 요소를 사용하여 모든 다운스트림 하위 구성 요소를 찾습니다.

    CM2 구성 요소의 모든 하위 항목, 즉 재귀적으로 연결된 하위 구성 요소를 가져오려면 두 가지 방법이 있습니다. 한 수준씩 재귀적으로 쿼리하거나 GSI2 인덱스를 쿼리할 수 있습니다.

    • 하위 구성 요소의 마지막 수준에 도달할 때까지 한 수준씩 재귀적으로 GSI1을 쿼리합니다.

      1. ParentId = "CM2"를 사용하여 GSI1을 쿼리합니다. 이는 다음 레코드를 반환합니다.

        ParentId

        ComponentId

        CM2

        CM4

        CM5

      2. 다시 ParentId = "CM4"를 사용하여 GSI1을 쿼리합니다. 이는 다음 레코드를 반환합니다.

        ParentId

        ComponentId

        CM4

        CM8

        CM9

      3. 다시 ParentId = "CM5"를 사용하여 GSI1을 쿼리합니다. 이는 다음 레코드를 반환합니다.

        루프 계속: 마지막 수준에 도달할 때까지 각 ComponentId에 대해 쿼리합니다. ParentId = "<ComponentId>"를 사용한 쿼리가 결과를 반환하지 않는 경우 이전 결과가 트리의 마지막 수준에서 나온 것입니다.

        ParentId

        ComponentId

        CM5

        CM10

      4. 모든 결과를 병합합니다.

         

        결과=[CM4, CM5] + [CM8, CM9] + [CM10]

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

    • 최상위 구성 요소(자동차 또는 CM1)의 계층 트리를 저장하는 GSI2를 쿼리합니다.

      1. 먼저 최상위 구성 요소 또는 최상위 항목과 CM2의 Path를 찾습니다. 이를 위해 이 경우 ComponentId = "CM2"를 사용하여 기본 테이블을 쿼리하여 계층 트리에서 해당 구성 요소의 경로를 찾습니다. GraphIdPat 속성을 선택합니다. 쿼리는 다음 레코드를 반환합니다.

        GraphId

        경로

        CM1#1

        CM1|CM2

      2. GraphId = "CM1#1" AND BEGINS_WITH("Path", "CM1|CM2|")를 사용하여 GSI2를 쿼리합니다. 쿼리가 다음 결과를 반환합니다.

        GraphId

        경로

        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. CM2에 대해 모든 하위 구성 요소를 반환하려면 ComponentId 속성을 선택합니다.