

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 5단계: DynamoDB 데이터 모델 생성


기본 테이블과 글로벌 보조 인덱스(GSI)의 파티션 키를 정의합니다.
+ 키 설계 모범 사례에 따라이 예제에서는를 기본 테이블의 파티션 키`ComponentId`로 사용합니다. `ComponentId`는 고유하기 때문에 세분성을 제공할 수 있습니다. DynamoDB는 파티션 키의 해시 값을 사용하여 데이터가 물리적으로 저장되는 파티션을 결정합니다. 고유한 구성 요소 ID는 다른 해시 값을 생성하여 테이블 내부의 데이터 배포를 용이하게 할 수 있습니다. `ComponentId` 파티션 키를 사용하여 기본 테이블을 쿼리할 수 있습니다.
+ 구성 요소의 직계 하위 항목을 찾으려면 `ParentId`가 파티션 키이고 `ComponentId`가 정렬 키인 GSI를 생성합니다. `ParentId`를 파티션 키로 사용하여 이 GSI를 쿼리할 수 있습니다.
+ 구성 요소의 모든 재귀 하위 항목을 찾으려면 `GraphId`가 파티션 키이고 `Path`가 정렬 키인 GSI를 생성합니다. `GraphId`를 파티션 키로 사용하고 정렬 키에 `BEGINS_WITH(Path, "$path")` 연산자를 사용하여 이 GSI를 쿼리할 수 있습니다.


|  |  |  |  | 
| --- |--- |--- |--- |
|  | **파티션 키** | **정렬 키** | **매핑 속성** | 
| **기본 테이블** | `ComponentId` |  | `ParentId`, `GraphId`, `Path` | 
| **GSI1** | `ParentId` | `ComponentId` |  | 
| **GSI2** | `GraphId` | `Path` | `ComponentId` | 

## 테이블에 구성 요소 저장


다음 단계는 각 구성 요소를 DynamoDB 기본 테이블에 저장하는 것입니다. 예제 트리의 모든 구성 요소를 삽입한 후에는 다음과 같은 기본 테이블이 생성됩니다.


|  |  |  |  | 
| --- |--- |--- |--- |
| **ComponentId** | **ParentId** | **GraphId** | **경로** | 
|  CM1 |  |  CM1\$11 |  CM1 | 
|  CM2 |  CM1 |  CM1\$11 |  CM1\$1CM2 | 
|  CM3 |  CM1 |  CM1\$11 |  CM1\$1CM3 | 
|  CM4 |  CM2 |  CM1\$11 |  CM1\$1CM2\$1CM4 | 
|  CM5 |  CM2 |  CM1\$11 |  CM1\$1CM2\$1CM5 | 
|  CM6 |  CM3 |  CM1\$11 |  CM1\$1CM3\$1CM6 | 
|  CM7 |  CM3 |  CM1\$11 |  CM1\$1CM3\$1CM7 | 
|  CM8 |  CM4 |  CM1\$11 |  CM1\$1CM2\$1CM4\$1CM8 | 
|  CM9 |  CM4 |  CM1\$11 |  CM1\$1CM2\$1CM4\$1CM9 | 
|  CM10 |  CM5 |  CM1\$11 |  CM1\$1CM2\$1CM5\$1CM10 | 

## GSI1 인덱스


구성 요소의 직계 하위 항목을 모두 확인하려면 `ParentId`를 파티션 키로 사용하고 `ComponentId`를 정렬 키로 사용하여 인덱스를 생성합니다. 다음 피벗 테이블은 GSI1 인덱스를 나타냅니다. 이 인덱스를 사용하면 상위 구성 요소 ID로 모든 직계 하위 구성 요소를 검색할 수 있습니다. 예를 들어, 자동차에서 사용할 수 있는 배터리 수(CM1) 또는 모듈에서 사용할 수 있는 셀(CM4)을 확인할 수 있습니다.


|  |  | 
| --- |--- |
| **ParentId** | **ComponentId** | 
| CM1 | CM2CM3 | 
| CM2 | CM4CM5 | 
| CM3 | CM6CM7 | 
| CM4 | CM8CM9 | 
| CM5 | CM10 | 

## GSI2 인덱스


다음 피벗 테이블은 GSI2 인덱스를 나타냅니다. `GraphId`를 파티션 키로 사용하고, `Path`를 정렬 키로 사용하여 구성됩니다. `GraphI`d 및 정렬 키(`Path`)에 대한 `begins_with` 연산을 사용하면 트리에서 구성 요소의 전체 계보를 찾을 수 있습니다.


|  |  |  | 
| --- |--- |--- |
| **GraphId** | **경로** | **ComponentId** | 
| CM1\$11 | CM1CM1\$1CM2CM1\$1CM3CM1\$1CM2\$1CM4CM1\$1CM2\$1CM5CM1\$1CM2\$1CM4\$1CM8CM1\$1CM2\$1CM4\$1CM9CM1\$1CM2\$1CM5\$1CM10CM1\$1CM3\$1CM6CM1\$1CM3\$1CM7 | CM1CM2CM3CM4CM5CM8CM9CM10CM6CM7 | 