외로운 Nova의 작업실
aws - DynamoDB 본문
- DynamoDB
DynamoDB는 NoSQL 데이터베이스를 제공하는 서비스로 아마존에서 개발한 NoSQL 데이터베이스이며 사용자가 따로 설치 운영 확장 하지않아도 원할때 바로 사용할 수 있습니다.
DynamoDB는 읽기와 쓰기가 매우 빈번하고 처리 속도가 빨라야하는 환경, 작은 용량의 데이터가 매우 많을때 고 가용성의 분산 데이터베이스를 자체적으로 운영하기에는 부담될 때 적합합니다. 따라서 모바일 게임과 소셜 네트워크같은 서비스에 유용합니다. 단, 관계형 데이터베이스가 아니기때문에 트랜젝션, 조인과 같은 복잡한 쿼리가 필요한 환경에는 적합하지않습니다.
관계형 데이터베이스에서는 테이블의 스키마를 정해놓고 데이터를 추가해야하지만 Nosql 데이터베이스는 스키마가 정해져있지 않습니다. 따라서 유연합니다.
DynamoDB는 리전별로 생성할 수 있으며 데이터를 3곳의 AZ에 복제하여 성능과 가용성을 높입니다. 사용자가 따로 데이터를 백업할 필요가 없습니다.
기존 데이터베이스는 테이블의 용량이 커지면 샤딩이라는 데이터베이스를 분할하여 저장해야합니다. 그래서 샤딩을 직접 구현하거나 개발하고 운영하는 것이 번거로웠습니다. 하지만 DynampDB는 이런것들을 자동으로 처리하기때문에 데이터가 늘어나는 것을 신경쓸 필요가 없습니다.
DynamoDB에서는 필수로 기본 키(Primary Key)로 인덱스를 생성해야합니다. 이 인덱스는 1,2,3 등과 같습니다. 이를 테이블 인덱스라고 합니다. 또한 보조키 두개를 더 둘 수 있습니다. 이는 더 빠르게 정보를 찾기위해서 만드는 것입니다. 그 보조키는 아래와 같습니다.
로컬 보조 인덱스 : 기본키로 해시키를 하고 범위키를 다르게 설정한 것
글로벌 보조 인덱스 : 해시키와 범위키를 기본키와 다르게 설정한 것입니다.
- 테이블 만들어보기
예를 들어 쿠키런 게임에서 주간 전체 순위와 주간 친구 순위를 산출하기위한 테이블을 만들려할때 아래와 같이 2개의 테이블을 만들 수 있습니다.
id : 숫자형식으로 고유한 값입닌다.
Name : 문자열 형식으로 유저의 이름입니다.
TopScore : 숫자형식이며 유저의 주간 최고점수를 저장합니다.
Week : 문자열 형식이며 한주를 저장합니다. ex)2014-04-23,2014-04-29
FriendIdAndWeek : 문자열형식이며 현재 유저의 친구 ID와 한주를 함께 저장합니다. ex)2,2014-05-23,2014-05-29
UserLeaderboard테이블에서 전체 주간 순위를 뽑아내려면 글로벌 보조 인덱스로 Week를 기준으로 TopScore를 내림차순 하면됩니다.
FriendsLeaderboard테이블에서 친구 주간 순위를 뽑아내려면 글로벌 보조 인덱스로 FriendldAndWeek 기준으로 Score를 내림차순 하면 됩니다.
- 테이블 생성
DynamoDB 카테고리에서 테이블 생성을 눌러줍니다.
파티션키가 primary key이고 정렬키가 범위키입니다.
설정 사용자 지정으로 변경해줍니다.
용량 모드를 변경해줍니다.
로컬 보조 인덱스를 만들어줍니다.
글로벌 보조 인덱스를 만들어줍니다.
UserLeaderboard 테이블이 생성된 것을 확인할 수 있습니다.
FriendsLeaderboard도 만들어줍니다.
글로벌 보조인덱스도 만들어줍니다.
- 데이터 추가
이제 데이터 몇개를 추가해보겠습니다.
먼저, UserLeaderboard입니다.
Id | Week | TopScore | Name |
1 | 2014-05-09,2014-05-14 | 32847 | John |
2 | 2014-05-09,2014-05-14 | 42710 | Maria |
3 | 2014-05-09,2014-05-14 | 19202 | Andrew |
1 | 2014-05-02,2014-05-8 | 24209 | John |
다음은 FriendsLeaderboard입니다.
Id | FriendIdAndWeek | Score | Name |
1 | 1,2014-05-09,2014-05-15 | 32847 | John |
1 | 2,2014-05-09,2014-05-15 | 32847 | John |
2 | 1,2014-05-09,2014-05-15 | 42710 | Maria |
2 | 2,2014-05-09,2014-05-15 | 42710 | Maria |
2 | 3,2014-05-09,2014-05-15 | 42710 | Maria |
3 | 2,2014-05-09,2014-05-15 | 19202 | Andrew |
3 | 3,2014-05-09,2014-05-15 | 19202 | Andrew |
따라서 Maria의 주간 친구 순위는 FriendIdAndWeek에서 2로 시작하는 값들의 score을 뽑아내면됩니다.
1과2는 친구입니다.
2는 1과3과 친구입니다.
3은 2와 친구입니다.
이제 실제로 만들어보겠습니다.
항목 생성을 눌러 줍니다.
이렇게 하나씩 만들어줍니다.
하나 생겻습니다. 이제 3개 더 해보겠습니다.
다 만들었습니다. 이제 FriendIdLeaderboard를 만들어보겠습니다.
- 테이블 쿼리하기
표 항목 탐색을 눌러줍니다.
Week로 TopScore를 조회해줍니다.
값들이 나옵니다.
이제 친구들에서 쿼리를 해보겠습니다.
FriendIdAndWeek값으로 Score값을 내림차순 정렬해줍니다.
친구들중에는 Maria가 1등임을 알 수 있습니다.
'Cloud > aws' 카테고리의 다른 글
aws - IAM (0) | 2023.10.17 |
---|---|
aws - ElastiCache (0) | 2023.10.17 |
aws - RDS (0) | 2023.10.14 |
aws - CloudFront (0) | 2023.10.13 |
aws - S3 (0) | 2023.10.13 |