====== AWS DynamoDB ====== * https://aws.amazon.com/ko/dynamodb/ * [[https://docs.aws.amazon.com/ko_kr/amazondynamodb/latest/developerguide/bp-general-nosql-design.html#bp-general-nosql-design-approach|DynamoDB를 사용한 설계 및 아키텍처 설계 모범 사례 - Amazon DynamoDB]] : 가장 중요한 pitfalls 들이 나오므로 필독할 것. * [[https://docs.aws.amazon.com/ko_kr/amazondynamodb/latest/developerguide/DynamoDBLocal.html|DynamoDB 로컬 설정(다운로드 버전) - Amazon DynamoDB]] * [[aws:localstack|LocalStack]] * https://github.com/mhart/dynalite * https://mvnrepository.com/artifact/com.amazonaws/DynamoDBLocal?repo=mulesoft-public ===== Primary Key ===== * Primary Key = Partition Key + Sort Key * Partition Key 는 필수이고, Sort Key 는 선택이다. * Primary Key 는 Unique 해야한다. 즉, Partition Key + Sort Key 는 Unique 해야한다. * Sort Key 가 없을 때는 Partition Key 가 Unique 해야한다. ===== Partition Key ===== * 성능에 가장 중요한 요소로 작동하는 것이 Partition Key 이다. * 절대로 한 번에 쓰기가 일어나거나, 읽기가 한번에 일어나는 파티션 키를 사용해서는 안된다. (예: 생성일자 같은 것은 사용금지) * 전체에서 Unique 한 값이나 UUID 등 랜덤 분산이 될 법한 것을 키로 사용해야 한다. * 굳이 날짜를 사용하겠다면 postfix 로 1~200 정도를 붙여서 파티션키를 만들고 조회도 200번 해서 합치게 한다. (예: ''2023-01-06.001 ~ 2023-01-06.200'') * [[https://www.youtube.com/watch?v=XvD2FrS5yYM|AWS DynamoDB Schema Design | How to choose the right key - YouTube]] ===== dynamodb admin ===== * https://www.npmjs.com/package/dynamodb-admin ===== distributed lock 분산락 ===== * [[https://aws.amazon.com/ko/blogs/database/building-distributed-locks-with-the-dynamodb-lock-client/|Building Distributed Locks with the DynamoDB Lock Client | AWS Database Blog]] * [[https://github.com/awslabs/amazon-dynamodb-lock-client|awslabs/amazon-dynamodb-lock-client: The AmazonDynamoDBLockClient is a general purpose distributed locking library built on top of DynamoDB. It supports both coarse-grained and fine-grained locking.]] ===== 비용 최적화 ===== * [[https://techblog.lotteon.com/%ED%9A%A8%EC%9C%A8%EC%A0%81%EC%9D%B8-dynamodb-%EC%9A%B4%EC%98%81%ED%95%98%EA%B8%B0-a44b6e3c3392|Dynamic했던 DynamoDB 비용효율화. Dynamo DB( 이하 ‘DDB’)는 잘 쓰면 약이지만 잘못 쓰면… | by Hyekyung | 롯데ON 기술 블로그]] * **Cost Explorer**로 비용 확인 * PITR 끄기 : 단, 별도의 백업 방식을 두어야 함. * Standard IA : RCU, WCU의 사용이 적고 스토리지 사용이 많은 테이블 대상으로 적용하면 30%정도의 비용 효율을 볼 수 있는 옵션 * TTL 두고 불필요한 데이터 자동 삭제 ===== 참고 ===== * [[https://aws.amazon.com/ko/blogs/database/resolve-to-follow-amazon-dynamodb-best-practices-in-2019/|Resolve to follow Amazon DynamoDB best practices in 2019 | AWS Database Blog]] * [[http://woowabros.github.io/study/2019/06/05/spring-data-dynamodb-1.html|Spring Boot에서 Repository로 DynamoDB 조작하기 (1) - 설정부터 실행까지 - 우아한형제들 기술 블로그]] * [[https://dev.classmethod.jp/articles/introduce_amazon_dynamodb/|AWS의 대표적인 NoSQL 데이터베이스 서비스! Amazon DynamoDB에 입문 해봅시다. | DevelopersIO]] * [[https://aws.amazon.com/ko/blogs/compute/exploring-serverless-patterns-for-amazon-dynamodb/|Exploring serverless patterns for Amazon DynamoDB | AWS Compute Blog]] * [[https://www.youtube.com/watch?v=2k2GINpO308|AWS DynamoDB Tutorial For Beginners - YouTube]]