NoSQL임에도 DynamoDB는 기본키 설정이 가능하며 검색 가능 여부와 성능 상태를 위해 indexing과 key 설정이 중요하다.
☑️ 클러스터링, 백업 정책, 성능 향상, 다중 리젼 지원
☑️ 모든 데이터는 SSD에 저장되어 기본 입출력 속도 빠름
☑️ HTTP 비연결형 통신으로 데이터 가져오기 (connection pool 필요 ❌)
☑️ 파티션 관리는 백그라운드에서 이루어지며, 사용자가 직접 관리할 필요 ❌ (index 세팅은 필요)
☑️ AWS라는 기업에서 운영하는 severless 플랫폼의 DB이며, 운영하다 장애가 발생하는 날에는 AWS Support의 도움으로 문제를 해결할 수 있음
😫 ORM 지원 라이브러리 ❌
🧬 여러 쿼리에 대한 일관성 및 원자성을 보장하지 않음 (no transaction)
😡 높은 난이도
😭 턱없이 적은 참고 자료
🤮 워크벤치 툴 존재 ❌, Web Console GUI는 사용하기 불편
DynamoDB는 기본키를 Partition Key로 구성되는 단순 기본 키와 Partition Key와 Sort Key로 구성되는 복합 기본 키로 표현할 수 있다.
테이블에서 하나 이상의 보조 인덱스를 생성할 수 있다.
보조 인덱스를 사용하면 기본 키에 대한 쿼리는 물론이고 대체 키를 사용하여 테이블의 데이터도 쿼리할 수 있다.
☑️ 테이블에서 보조 인덱스를 생성한 후에는 테이블에서 데이터를 읽는 것과 같은 방식으로 인덱스에서 데이터를 읽을 수 있다.
💡 DynamoDB에서 지원하는 인덱스
글로벌 보조 인덱스
Partition Key 및 Sort Key가 테이블과 다를 수 있는 인덱스
로컬 보조 인덱스
기본 테이블과 Partition Key는 동일하지만 Sort Key가 다른 인덱스
☑️ DynamoDB의 테이블에서는 파티션 키를 기준으로 또는 파티션 키와 정렬 키를 기준으로 데이터 항목을 쿼리할 수 있다.
☑️ 이러한 이벤트에 대한 데이터가 이벤트가 발생한 순서대로 거의 실시간으로 스트림에 표시된다.
☑️ 각 이벤트는 스트림 레코드에 의해 나타난다.
☑️ 테이블에서 스트림을 활성화하면 아래 이벤트 중 하나가 발생시 DynamoDB Streams가 스트림 레코드를 기록한다.
☑️ 각 스트림 레코드에는 또한 테이블의 이름, 이벤트 타임스탬프 및 다른 메타데이터가 포함되어 있다.
📌 스트림 레코드의 수명 → 24시간
📌 24시간이 지나면 자동으로 제거
💡 DynamoDB Streams를 AWS Lambda와 함께 사용하면 트리거, 즉 관심 있는 이벤트가 스트림에 나타날 때마다 자동으로 실행되는 코드를 생성할 수 있다.
✔︎ 해당 테이블에 스트림을 활성화한 후, 스트림을 람다 함수와 연결할 수 있다.
✔︎ 람다 함수는 새로운 스트림 레코드가 표시될 때마다 실행되지만, Customers 테이블에 추가된 새로운 항목만 처리한다.
✔︎ EmailAddress 속성이 있는 모든 항목에 대해 람다 함수는 Amazon SES (Amazon Simple Email Service)를 호출하여 해당 주소에 이메일을 보낸다.
‼️ DynamoDB Streams는 트리거 뿐 아니라, AWS region 내 혹은 region 간의 데이터 복제, DynamoDB 테이블의 구체화된 데이터 보기, Kinesis 구체화된 보기를 사용한 데이터 분석 등의 강력한 솔루션을 지원한다.