DyanmoDB 모범 사례를 통해 다음 사항을 명확하게 알 수 있습니다.
DynamoDB 애플리케이션에서 가능한 적은 테이블을 유지해야합니다. 가장 잘 설계된 응용 프로그램은 하나의 테이블 만 필요합니다.
나는 DyanmoDB를 다루는 모든 단일 자습서가 다중 테이블 디자인을 가지고 있다는 것이 재미 있다는 것을 알게되었습니다.
그러나 이것이 실제로 무엇을 의미합니까?
사용자, 프로젝트 및 문서의 세 가지 주요 엔터티가있는 간단한 응용 프로그램을 살펴 보겠습니다. 사용자는 여러 프로젝트를 소유하며 프로젝트는 여러 문서를 가질 수 있습니다. 우리는 일반적으로 사용자를위한 프로젝트와 프로젝트를위한 문서를 쿼리해야합니다. 많은 수의 쓰기를 상당한 마진으로 읽습니다.
순진한 자습서의 테이블 디자인에는 세 개의 테이블이 사용됩니다.
Users
Hash key
user-id
Projects
Hash key Global Index
project-id user-id
Documents
Hash key Global Index
document-id project-id
우리는 아주 쉽게 무너질 수 Project
및 Document
하나 개에 Documents
테이블 :
Documents
Hash key Sort key Global Index
project-id document-id user-id
그런데 왜 거기서 멈춰? 왜 하나의 테이블이 그들을 모두 지배하지 않습니까? User
이 모든 것의 근원 이기 때문에 ...
Users
Hash key Sort key
user-id aspect
--------- ---------
foo user email: foo@bar.com ...
foo project:1 title: "The Foo Project"
foo project:1:document:2 document-id: 2 ...
그런 다음 email
사용자 레코드 조회 document-id
필드와 직접 문서 조회 필드에 대한 글로벌 인덱스를 갖게 됩니다.
그것이 작동하는 방식입니까? 그런 종류가 다른 종류의 데이터를 같은 테이블에 넣는 것이 합법적입니까? 아니면 두 번째, 2 테이블 디자인이 더 나은 접근 방법입니까?
어떤 시점에서 두 번째 테이블을 추가하는 것이 옳습니까?