- AWS의 NoSQL 데이터베이스, DDB라고도 부른다
- DB의 사용량에 따라 과금을 책정하며, 사용량이 늘어나면 자동으로 스케일링 확장 및 축소를 해준다
특징
- 쿼리에 Order By 구문을 사용할 수 없고, 대신 Sort Key를 별도로 지정하여 정렬을 시킬 수 있다
- 기본 Partition Key 외 보조 Index로 데이터 관리 및 쿼리를 활용할 수 있다
-
LSI : Local Secondary Index, RDB에선 복합키 같은 역할
- 위 예시로 ForumName이 PK, Subject가 SortKey라 가정하면, LSI는 동일한 PK값들 하에서만 인덱스 역할을 할 수 있다
- 여기선 S3인 PK들의 한해 Subject가 a,b,c,d 인 값들로 LSI로 쿼리를 수행할 수 있다
-
GSI : Global Secondary Index, 특정 값, 컬럼에 대한 전체 인덱스를 뜻한다
- 블록체인을 예시로 든다면, 특정 Hash 값을 GSI로 잡아 각 Hash들이 인덱스 값으로써 쿼리로 확인할 수 있게 되는 것
- Range 쿼리 기능이 빈약하다, NoSQL이 GET, PUT이 특징이라 Range 자체가 취약하게 구성되어 있는데, DDB에선 이를 위해 Range Key를 별도 옵션으로 제공하고 있다
- 허나 그만큼 Index에 대한 Range 데이터를 별도 생성 및 관리를 해야 되서 그만큼 추가비용이 발생한다
- 기간별로 데이터를 별도 저장하고 있어, 특정 시간대로 롤백도 가능하다
쿼리
- 데이터를 탐색하는데 DDB에서 어떻게 쿼리를 해야할지 모르겠다면 아래 그림을 참고할 것
CLI 쿼리 예시
- cli 쿼리를 수행하기 위해선 AWS CLI를 따로 설치해야 한다
- 특정 컬럼값의 필터링 스캔 예시
aws dynamodb scan --table-name {{테이블명}} --scan-filter '{ "{{컬럼명}}": { "AttributeValueList": [{"S": "2021-02-"}], "ComparisonOperator": "CONTAINS" } }'
aws dynamodb scan --table-name {{테이블명}} --scan-filter '{ "{{컬럼명}}": { "AttributeValueList": [{"S": "hgwt"}], "ComparisonOperator": "EQ" } }'