5단계: DynamoDB 데이터 모델 생성
기본 테이블과 글로벌 보조 인덱스(GSI)의 파티션 키를 정의합니다.
-
키 설계 모범 사례에 따라 이 예제에서는
ComponentId를 기본 테이블의 파티션 키로 사용합니다.ComponentId는 고유하기 때문에 세분성을 제공할 수 있습니다. DynamoDB는 파티션 키의 해시 값을 사용하여 데이터가 물리적으로 저장되는 파티션을 결정합니다. 고유한 구성 요소 ID는 다른 해시 값을 생성하여 테이블 내부의 데이터 배포를 용이하게 할 수 있습니다.ComponentId파티션 키를 사용하여 기본 테이블을 쿼리할 수 있습니다. -
구성 요소의 직계 하위 항목을 찾으려면
ParentId가 파티션 키이고ComponentId가 정렬 키인 GSI를 생성합니다.ParentId를 파티션 키로 사용하여 이 GSI를 쿼리할 수 있습니다. -
구성 요소의 모든 재귀 하위 항목을 찾으려면
GraphId가 파티션 키이고Path가 정렬 키인 GSI를 생성합니다.GraphId를 파티션 키로 사용하고 정렬 키에BEGINS_WITH(Path, "$path")연산자를 사용하여 이 GSI를 쿼리할 수 있습니다.
파티션 키 |
정렬 키 |
매핑 속성 |
|
기본 테이블 |
|
|
|
GSI1 |
|
|
|
GSI2 |
|
|
|
테이블에 구성 요소 저장
다음 단계는 각 구성 요소를 DynamoDB 기본 테이블에 저장하는 것입니다. 예제 트리의 모든 구성 요소를 삽입한 후에는 다음과 같은 기본 테이블이 생성됩니다.
ComponentId |
ParentId |
GraphId |
경로 |
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 |
GSI1 인덱스
구성 요소의 직계 하위 항목을 모두 확인하려면 ParentId를 파티션 키로 사용하고 ComponentId를 정렬 키로 사용하여 인덱스를 생성합니다. 다음 피벗 테이블은 GSI1 인덱스를 나타냅니다. 이 인덱스를 사용하면 상위 구성 요소 ID로 모든 직계 하위 구성 요소를 검색할 수 있습니다. 예를 들어, 자동차에서 사용할 수 있는 배터리 수(CM1) 또는 모듈에서 사용할 수 있는 셀(CM4)을 확인할 수 있습니다.
ParentId |
ComponentId |
CM1 |
CM2 CM3 |
CM2 |
CM4 CM5 |
CM3 |
CM6 CM7 |
CM4 |
CM8 CM9 |
CM5 |
CM10 |
GSI2 인덱스
다음 피벗 테이블은 GSI2 인덱스를 나타냅니다. GraphId를 파티션 키로 사용하고, Path를 정렬 키로 사용하여 구성됩니다. GraphId 및 정렬 키(Path)에 대한 begins_with 연산을 사용하면 트리에서 구성 요소의 전체 계보를 찾을 수 있습니다.
GraphId |
경로 |
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 |