다이나모 Db | Amazon Dynamo Db 활용하기 – 강민석:: Aws Database Modernization Day 온라인 94 개의 정답

당신은 주제를 찾고 있습니까 “다이나모 db – Amazon Dynamo DB 활용하기 – 강민석:: AWS Database Modernization Day 온라인“? 다음 카테고리의 웹사이트 ppa.maxfit.vn 에서 귀하의 모든 질문에 답변해 드립니다: https://ppa.maxfit.vn/blog. 바로 아래에서 답을 찾을 수 있습니다. 작성자 Amazon Web Services Korea 이(가) 작성한 기사에는 조회수 1,707회 및 좋아요 22개 개의 좋아요가 있습니다.

다이나모 db 주제에 대한 동영상 보기

여기에서 이 주제에 대한 비디오를 시청하십시오. 주의 깊게 살펴보고 읽고 있는 내용에 대한 피드백을 제공하세요!

d여기에서 Amazon Dynamo DB 활용하기 – 강민석:: AWS Database Modernization Day 온라인 – 다이나모 db 주제에 대한 세부정보를 참조하세요

* 발표자료: https://www.slideshare.net/awskorea/dynamo-db-aws-database-modernization-day
Amazon DynamoDB는 대량의 트래픽에 대해 빠른 응답시간을 보장하는 AWS의 NOSQL Database 서비스 입니다. 본 세션에서는 DynamoDB를 생성하고 테이블 디자인 후 데이터 입력, 삭제, 업데이트 및 성능에 관련된 설정에 대해서 진행합니다. 이 세션후 참석자들은 DyanmoDB에 대한 이해하며 직접 구성 및 사용할 수 있습니다.

다이나모 db 주제에 대한 자세한 내용은 여기를 참조하세요.

NoSQL 데이터베이스 | 데이터 관리 | Amazon Web Services

Amazon DynamoDB는 모든 규모에서 고성능 애플리케이션을 실행하도록 설계된 완전관리형의 서버리스 키-값 NoSQL 데이터베이스입니다. DynamoDB는 기본 제공 보안, …

+ 여기를 클릭

Source: aws.amazon.com

Date Published: 7/11/2021

View: 4788

[AWS] DynamoDB(다이나모디비) – 네이버 블로그

[AWS] DynamoDB(다이나모디비) … 카산드라, 몽고DB. 장, 단점. 복잡한 질의 가능, … 다른 DB 시스템과 마찬가지로 데이터를 테이블에 저장한다.

+ 더 읽기

Source: m.blog.naver.com

Date Published: 1/9/2022

View: 4065

AWS 다이나모 DB 데이터베이스 CURD 기초 및 활용

예제 실습을 위해 AWS 콘솔에 접근한 뒤 모든 서비스에서 DynamoDB를 선택합니다. DynamoDB. 다이나모 DB 테이블 생성. ▽ 1.

+ 더 읽기

Source: tttap.tistory.com

Date Published: 4/27/2022

View: 864

Dynamo DB 공식 문서 정리 1편 – 핵심 구성 요소

다이나모 디비는 primary key를 이용하여 각 항목을 고유하게 식별하고 보조 인덱스를 이용하여 유연하게 쿼리를 만들수 있게 해줍니다. 테이블 (Table).

+ 여기를 클릭

Source: pjh3749.tistory.com

Date Published: 3/8/2022

View: 4777

DynamoDB 장단점과 DynamoDB를 시작 전에 알면 좋은 11가지

EA : MySQL 클러스너로 구성되던 이전 DB에 비해 90%의 비용을 절감사용자 ID를 파티션 및 기본 키로 사용해 (1:1 모델링 패턴) 사용자 데이터 및 …

+ 여기에 더 보기

Source: sujl95.tistory.com

Date Published: 7/26/2021

View: 5542

효과적인 DynamoDB 디자인 및 활용 – 꿀벌개발일지

발생일: 2020.02.18 키워드: nosql, dynamodb, 다이나모디비 문제: 이번엔 디비를 NoSQL로 AWS의 DynamoDB를 사용해서 구성해보려고 … Daylogs/DB …

+ 더 읽기

Source: ohgyun.com

Date Published: 6/16/2022

View: 6678

주제와 관련된 이미지 다이나모 db

주제와 관련된 더 많은 사진을 참조하십시오 Amazon Dynamo DB 활용하기 – 강민석:: AWS Database Modernization Day 온라인. 댓글에서 더 많은 관련 이미지를 보거나 필요한 경우 더 많은 관련 기사를 볼 수 있습니다.

Amazon Dynamo DB 활용하기 - 강민석:: AWS Database Modernization Day 온라인
Amazon Dynamo DB 활용하기 – 강민석:: AWS Database Modernization Day 온라인

주제에 대한 기사 평가 다이나모 db

  • Author: Amazon Web Services Korea
  • Views: 조회수 1,707회
  • Likes: 좋아요 22개
  • Date Published: 2020. 8. 18.
  • Video Url link: https://www.youtube.com/watch?v=U_GJYMUjiwA

[AWS] DynamoDB(다이나모디비)

– NoSQL 특징

Key-Value 쌍으로 저장.

이미지 동영상 등 어떠한 형태도 저장 가능

질의 속도가 빠르다.

키를 통한 값 전체 검색은 가능하나, 값의 일부 검색이나 내용을 통한 검색을 할 수 없다.

– DynamoDB 구성

다른 DB 시스템과 마찬가지로 데이터를 테이블에 저장한다.

각각의 데이터는 항목과 속성을 이루어 진다.

각 개별 데이터를 항목이라 하고 , 항목이 가지고 있는 Key-Value 형태의 데이터를 속성이라 한다.

파티션 키 : 테이블에 무조건 하나만 존재해야 하는 값으로 테이블에 있는 아이템을 어디에 나눌지 정하는 Key

정렬 키 : 정렬할때 사용하는 Key로 필수는 아님

글로벌 보조 인덱스(GSI) : 테이블을 만든 후 추가할 수 있으며, 현재 테이블과 동기화해 동일한 테이블 작성 가능

로컬 세컨더리 인덱스(LSI) : 대체 정렬 키로 쿼리, 스켄 시 사용, 데이터를 생성하는 시점에서만 만들 수 있다.

추가적인 자세한 사항은 아래 AWS 설명서를 참고해 주시기 바랍니다.

AWS 다이나모 DB 데이터베이스 CURD 기초 및 활용

요즘 시간이 날 때마다 AWS에 관련된 책을 보고 있습니다. 당신이 지금 알아야 할 AWS라는 책을 참고해서 데이터베이스에서 간단한 항목을 만들고 수정 편집 그리고 삭제까지 구현해봤습니다. 인덱스를 만들어서 좀 더 빠르게 접근하는 방법도 배웠습니다. 몽고 DB에 비교하면 거의 다른 점은 없는데 기본키가 있고 웹 콘솔에서 조작한다는 점이 특이하네요. 아마존 웹 서비스는 거의 이런 식으로 접근하니 당연한 것 같기도 합니다. 기존의 DBMS처럼 조인이나 트랜잭션에는 적합하지 않지만 매우 유용하게 서비스에 적용할 수 있을 것 같습니다. 무엇보다도 정규화 같은 머리 아픈 개념이 없으니 좋네요. 또한 가용 영역 3군데에서 데이터베이스를 복제해서 SSD에 기록한다고 합니다. 엄청난 장점이죠. 샤딩과 같은 복잡한 개념을 포함하지 않아도 될 것 같습니다. 또한 직접 읽기 쓰기 Throughput을 지정할 수 있어서 처리량을 관리할 수 있습니다. 처리량은 한 번에 최대 2배까지 높일 수 있으며 처리량을 낮추는 횟수는 4번으로 제한됩니다.

다이나모 데이터베이스 특징

단순하고 신속한 배포 및 확장

데이터 백업의 편리함

일관된 응답시간

보조 인덱스를 이용한 조회 (이 부분이 특별함)

사용량에 따른 과금

무제한 용량 (S3와 같음)

예제 실습을 위해 AWS 콘솔에 접근한 뒤 모든 서비스에서 DynamoDB를 선택합니다.

DynamoDB

다이나모 DB 테이블 생성

▼ 1. 우선 테이블을 만들어보겠습니다. 왼쪽 메뉴에서 테이블을 선택한 뒤 테이블 만들기 버튼을 누릅니다.

1. 다이나모 데이터베이스 테이블 만들기

▼ 2. 테이블 이름(UnivStudent)을 입력하고 파티션 키(univ_name) 정렬 키(univ_id)로 입력한 뒤 정렬 키는 번호로 변경해줍니다. 참고로 파티션 키만 적용이 가능하지만 정렬 키를 추가해서 기본키를 만들면 해당 정렬키로 기본 인덱싱이 됩니다.

2. 다이나모 테이블 설정

▼ 3. 테이블을 만드는 중입니다. 몇 초 안에 생성이 완료됩니다.

3. 다이나모 DB 테이블 만드는 중

▼ 4. 이번에는 항목을 만들어 보겠습니다. 항목 탭을 누르고 항목 만들기 버튼을 누릅니다.

4. 다이나모 DB 항목 추가

▼ 5. 항목 만들기 창이 뜨면 아까 테이블을 만들 때 사용했던 univ_name, univ_id를 기본값으로 입력합니다. null은 허용이 안됩니다.

5. 항목 필드 입력

▼ 6. 새로운 필드를 추가해보겠습니다. + 버튼을 누르면 되고 Append 타입을 문자열로 설정해줍니다.

6. 항목에 새로운 ROW 추가

▼ 7. 입력이 완료되면 저장 버튼을 눌러서 항목을 추가합니다.

7. 모든 항목의 입력값 적용

▼ 8. 새로운 항목이 테이블에 하나 생성된 것을 볼 수 있습니다.

8. 추가된 항목 확인

▼ 9. 새로운 항목을 계속 추가해보겠습니다.

9. 새로운 항목 추가 1

▼ 10. 새로운 항목을 계속 추가해보겠습니다.

10. 새로운 항목 추가 2

▼ 11. 3개의 항목이 추가된 것을 확인합니다.

11. 추가된 항목 확인

▼ 12. 만약 특별히 필드를 삭제하거나 편집하고 싶다면 해당 항목의 체크박스를 선택한 뒤에 작업 버튼을 눌러서 수정 편집 및 변경할 수 있습니다.

12. 항목 선택후 작업기능

다이나모 DB 스캔과 쿼리

▼ 13. 이제 위에서 만든 테이블 및 항목을 검색해보겠습니다. 다이나모 DB는 스캔과 쿼리라는 개념이 있습니다. 스캔은 필터를 기준으로 모든 항목을 검색해옵니다.

13. 다이나모 DB 스캔 기능

▼ 14. 만약 스캔보다 더 좁은 의미의 쿼리를 선택해서 검색하고 싶다면 스캔 드롭박스를 눌러서 쿼리로 변경해줍니다.

14. 스캔과 쿼리

▼ 15. 쿼리는 특정 키값으로 검색할 수 있습니다. 처음 테이블을 만들때 사용했던 파티션 키로 검색이 가능합니다.

15. 다이나모 DB 쿼리 기능

다이나모 DB 인덱스 생성

▼ 16. 위의 검색 기능을 좀 더 잘 활용하기 위해서 인덱스를 만들어 쓸 수 있습니다. 인덱스 탭을 선택하고 인덱스를 생성합니다. major라는 파티션 키를 기본키로 입력합니다. 그럼 자동으로 인덱스 이름이 생성되는데요. 이를 변경할 수도 있습니다. 추정 비용은 약 3달러 정도가 나오네요. 한 달 기준이니 걱정 안 하셔도 됩니다. 어차피 예제는 만들고 삭제하면 됩니다.

16. 다이나모 DB 인덱스 만들기

▼ 17. 인덱스를 생성하는 과정은 대략 5분 정도 걸린다고 쓰여있는데 그보다는 빨리 되는 것 같습니다.

17. 다이나모 DB 인덱스 생성중

▼ 18. 이제 인덱스를 통해 검색해보겠습니다. 스캔 옆의 표 드롭박스를 선택해서 인덱스로 변경해줍니다.

18. 인덱스를 통한 검색

▼ 19. 검색 시작 버튼을 누르면 두 개의 항목이 표시됩니다. 즉 위에서 만든 파티션 키인 major라는 값이 없는 항목은 노출되지 않습니다.

19. 인덱스를 통한 검색 결과

▼ 20. 쿼리로 검색합니다. 역시 major가 없는 항목에 대해서는 표시되지 않습니다. 또한 기본 키로 검색하는 것보다 훨씬 빠르다고 하네요.

20. 인덱스와 쿼리 기능

다이나모 DB 테이블 삭제

▼ 21. 삭제는 아주 간단합니다. 왼쪽 상단 메뉴 버튼 중 테이블 만들기 옆에 있는 테이블 삭제 버튼을 눌러줍니다.

21. 테이블 삭제

▼ 22. 테이블 삭제 팝업이 뜨면 delete라고 입력한 뒤 삭제 버튼을 눌러주면 간단히 테이블이 삭제됩니다.

21. 다이나모 DB 테이블 삭제

다이나모 DB는 NoSQL로 처음에는 무슨 다이너마이트 이런 게 떠오릅니다. AWS를 사용한다면 보통 이런 NoSQL을 고려하는 사람도 많을 것입니다. 더욱이 아마존 웹서비스에서 기본적으로 지원하는 데이터베이스라서 조금 믿음이 가네요. 구글의 빅 테이블과 몽고 디비와 비슷하게 이제는 대중적으로 사용하는 데이터 베이스 같습니다.

현존하는 NoSQL을 제외하고 대부분의 데이터베이스가 스케일 업에 의존하고 있기 때문에 요즘은 이런 스케일 아웃이 가능한 NoSQL이 대세라고 합니다. 그런데 몽고 DB를 쓴다고 해도 대부분에 전문가가 아니라면 사용량 증가에 따른 고민이 꽤 많을 것 같은데요. 아무래도 아마존의 다이나모 DB 같은 경우 이런 서버 스케일링과 스토리지 확장에 대한 부분이 매우 손쉬워서 저 같은 초보자도 쉽게 서버리스 개발이 가능할 것 같습니다.

Amazon DynamoDB 요금표

aws.amazon.com/ko/dynamodb/pricing/

Dynamo DB 공식 문서 정리 1편

AWS에서 사용할 수 있는 Dynamo DB 에 대한 내용 정리 1편 핵심 구성 요소 입니다. 필요한 내용을들을 선별 하여 정리하였습니다.

핵심 구성 요소 (Core Components)

다이나모 디비에서 테이블, 항목 및 속성은 핵심 구성요소입니다. 테이블은 항목의 집합이고 각 항목은 속성의 집합입니다. 다이나모 디비는 primary key를 이용하여 각 항목을 고유하게 식별하고 보조 인덱스를 이용하여 유연하게 쿼리를 만들수 있게 해줍니다.

테이블 (Table)

테이블은 여타 데이터베이스와 마찬가지로 생각하면 됩니다.

항목 (Items)

항목은 모든 다른 항목들 중에서 고유하게 식별할 수 있는 속성들의 집합입니다. 다이나모 디비에서는 테이블에 저장하는 항목의 수의 제한이 없습니다.

속성 (Attributes)

각 항목은 하나 이상의 속성으로 구성됩니다. 예를들어 People 테이블 항목에는 사람의 id, 이름 등이 속성으로 될 수 있습니다.

공식 문서에서는 테이블 예시로 설명을 합니다. 조금 더 간편하게 알아볼 수 있도록 RDB와 다른 내용을 중점적으로 정리하였습니다. 가장 큰 차이점은 정해진 스키마가 없다는 점입니다. 예시를 볼까요.

People 이라는 테이블입니다.

Person 테이블

Person이라는 테이블에는 여러 속성들이 있습니다. 테이블에는 Primary Key (=기본키) 가 있습니다. 바로 PersonId 죠. 이 기본키를 제외하고는 People 에는 스키마가 없습니다. 위의 항목은 Adress에서 끝인데 밑의 항목은 FavoriteColor 라는 속성도 있는 것을 알 수 있습니다.

대부분의 속성은 scalar(스칼라) 입니다. 이는 문자열 혹은 숫자같이 하나의 값만 가질 수 있다는 겁니다. 그리고 내포속성을 가집니다. 내포속성이란 Address라는 속성처럼 depth를 가지고 있는 속성을 의미합니다. 다이나모 디비는 32 depth 까지 지원합니다.

다음 스키마는 Music 이라는 스키마입니다.

Music 테이블

굵게 볼드 처리되어 있는 속성은 Artist와 SontTitle 입니다. Music 테이블의 기본 키는 이 두개의 속성입니다. 이 기본키만 제외하면 다른 속성들은 정의할 필요가 없습니다.

이 키에 대해서 조금 더 알아볼까요.

기본 키

다이나모는 기본적으로 두 가지 키를 지원합니다. 바로 파티션 키와 정렬키입니다.

Partition Key (파티션키) 는 해시 키 라고도 할 수 있습니다. 즉 어떤 테이블이 파티션 키로만 구성되어 있다면 모든 항목은 이 파티션 키 하나만으로 식별할 수 있습니다. 위에서 설명한 Person 테이블 처럼 말이죠. PersonId로 모든 항목을 식별가능합니다. 해시 키라고도 부른는 이유는 다이나모 디비가 내부적으로 해시함수를 사용하기 때문입니다.

Sort Key (정렬키) 라는 것도 있습니다. 위에서 설명한 Music 테이블에서 SongTitle이 정렬키 입니다. 즉 Artists는 한명인데 노래가 여러개 인거죠. 파티션키와 정렬키로 구성된 테이블은 파티션키와 정렬키를 입력하면 원하는 항목에 바로 액세스 가능합니다. 이 파티션 키 + 정렬키를 합쳐서 복합 기본키라고 부릅니다. 이 복합 기본키로 쿼리를 더 유연하게 작성할 수 있습니다. 즉 작곡가명과 노래의 범위를 줘서 노래의 일부를 검색한다는지 하는 경우가 있을 수 있습니다.

보조 인덱스

테이블에서 기본 키에 대한 쿼리 뿐만 아니라 대체 키를 통해서 테이블의 데이터 쿼리를 할 수 있습니다.

Global Secondary Index: 기본 키 (파티션 키 + 정렬 키) 가 테이블의 기본 키와 다를 수 있는 경우

Local Secondary Index: 테이블과 파티션 키는 동일하지만 정렬키는 다른 인덱스

참고로 다이나모 디비는 테이블당 20개의 글로벌 보조 인덱스 5개의 로컬 보조 인덱스의 제한이 있습니다.

Music 이라는 테이블에 현재는 기본 키가 Artist와 SongTitle 입니다. 하지만 쿼리를 Genre로 주고 싶습니다.

이런식으로 보조 인덱스를 생성하여 사용할 수 있습니다. 이 인덱스 에서는 Genere는 파티션 키이고 AlbumTitle은 정렬키 입니다.

다이나모 디비 API (DynamoDB API)

다이나모 디비를 빠르게 이해하기 위해서는 다이나모 디비가 어떤 것들을 지원해주는지 알아야 합니다.

CRUD

기본적으로 다이나모 디비에 CRUD 작업이 어떻게 되는지 살펴봅시다. (Update, Delete는 생략합니다)

Create

PutItem: 테이블에 단일 항목을 씁니다. 최소 조건은 기본 키입니다. 기본키만 명시하면 다른 속성들은 쓰지않아도 됩니다. 즉 기본키만 명시하면 됩니다.

BatchWriteItem: 테이블에 최대 25개의 항목을 쓸 수 있습니다. 많은 양을 쓸 때 PutItem 개별 호출보다는 한방에 써서 네트워크 왕복을 한 번만 하게 끔 만드는 것이 더 효율적입니다. 하나 이상의 테이블에서 여러 항목을 삭제하는 경우에도 이것을 사용할 수 있습니다.

Read

GetItem: 테이블에서 단일 항목을 가져옵니다. 기본키를 지정해서 읽어올 수 있습니다. 전체 또는 일부가 반환됩니다.

BatchGetItem: 하나 이상의 테이블에서 최대 100개의 항목을 가져옵니다.

Query: 특정 파티션 키가 있는 모든 항목을 가져옵니다. 추가적으로 위에서 설명한 정렬키를 추가해서 조회가 가능합니다.

Scan: 지정한 테이블 또는 인덱스의 모든 항목을 가져옵니다. 전체 항목 또는 속성 일부만 가져옵니다. 쿼리와의 차이는 키가 없이도 조회 가능하지만 모든 테이블을 스캔해야 하는 단점이 있습니다.

(쿼리와 스캔의 자세한 차이는 추후 추가 정리 예정입니다)

읽기 일관성 (Read Consistency)

(참고로 리전에 따라 테이블 이름이 같더라도 다르게 인식됩니다.)

Eventually Consistent Reads (최종적 일관된 읽기) : 다이나모 테이블을 읽을 때 응답은 최근의 쓰기 작업이 반영이 되어 있지 않을 수도 있습니다. 하지만 계속 읽기 요청을 반복하면 최신 데이터가 반영된 응답을 받게 됩니다.

: 다이나모 테이블을 읽을 때 응답은 최근의 쓰기 작업이 반영이 되어 있지 않을 수도 있습니다. 하지만 계속 읽기 요청을 반복하면 최신 데이터가 반영된 응답을 받게 됩니다. Strongly Consistent Reads (강력한 일관된 읽기): 다이나모 테이블을 읽을 때 이전 쓰기 작업을 항상 반영합니다. 하지만 네트워크 지연이나 중단이 발생한 경우 500에러를 던질 수 있습니다. 위의 최종적 일관된 읽기 보다 시간이 좀 더 걸릴 수 있습니다.

보통 1초 이내에 모든 스토리지 위치의 데이터가 일관성을 갖게 됩니다. 참고로 디폴트는 최종적 일관된 읽기입니다. 다이나모에서 제공하는 읽기 작업에는 ConsistentRead 라는 파리미터를 제공하는데 이걸 true 로 하면 강력한 일관된 읽기를 사용합니다. (자세한 요금 정책은 공식 문서를 참고하세요)

읽기/쓰기 요금제 (Read/Write Capacity Mode)

On Demand Mode (온디맨드 모드)

온 디맨드 모드는 용량 제한없이 쓴만큼 내는 요금입니다. 애플리케이션 트래픽이 예측 불가할 때 사용합니다. 아주 간략히 이야기하면 이전 피크 트래픽의 최대 2배용량을 수용합니다. 즉 이전에 초당 5만회가 발생한 경우 초당 최대 10만회 까지 수용할 수 있습니다. (이 모드를 쓴다면 자세한 내용은 공식 문서를 참고하세요)

Provisioning Mode (프로비저닝 모드)

프로비저닝 모드는 애플리케이션에서 사용하는 초당 읽기/쓰기 횟수를 지정합니다. 애플리케이션 트래픽이 예측 가능할 때 사용합니다.

출처: https://docs.aws.amazon.com/dynamodb/index.html

DynamoDB란? 기본 개념설명

AWS를 사용하는 사용자라면, NoSQL을 사용하려고 고려하는 사용자라면, 누구나 한번쯤 들어봤을 수 있는 DB 솔루션입니다.

Google의 BigTable 과 NoSQL의 발전을 위해 노력하고 있는 AWS DynamoDB에 대해서 설명하겠습니다.

DynamoDB의 특징

– 배포가 단순하고 신속합니다. 이 의미는 설계를 해서 그 데이터베이스를 적용하기까지 오랜 시간이 걸리지 않는다는 이야기입니다.

– 확장이 단순하고 신속합니다. 수백만 IOPS를 처리할 수 있는 시스템 설계해두었기 때문에 단순한 인터페이스의 조작만으로 규모를 확장시키기 수월합니다.

– 데이터는 자동으로 복제됩니다. 데이터의 손실을 방지하기 위해서 데이터 베이스를 자동으로 백업해서 복사본을 두고 손실율을 낮추고 있습니다.

– 빠르고 일관된 응답시간. 일단 IO를 하는 시간이 빠른 것은 기본이고 아무리 규모가 증가하고 어떤 장애가 와도 일관적인 응답시간을 보여줍니다.

– 보조 인덱스를 통한 빠른 조회. NoSQL 특성상 관계가 없기 때문에 일반적으로 데이터를 찾기에는 인덱싱이 없으면 속도가 느려지지만 그 부분을 해결해줍니다.

– 사용한만큼 사용료를 지불합니다. 저장소의 사용과 사용하려는 퍼포먼스의 정도에 따라서 사용료를 지불합니다. 그래서 최적화시 킬 수 있습니다.

DynamoDB를 사용하는 목적

DynamoDB를 사용해야 하는 이유는 성능과 편의성, 대규모 DB를 구축하는데 필요한 비용들을 줄일 수 있습니다.

서비스를 구현한다고 하면 서비스는 빈번한 읽기 쓰기로 처리 속도는 빠릅니다.

작은 용량의 데이터를 처리할 경우, DynamoDB는 아주 효과적으로 사용될 수 있습니다.

데이터베이스를 확장해야하고 확장하는 과정에서 분산된 데이터베이스를 관리하기에 힘든 경우 사용하면 유리합니다.

즉, 모바일 게임이나 소셜 네트워크 같은 짧은 작업들을 처리하는 경우 아주 유용하게 사용될 수 있습니다.

DBMS처럼 트랜잭션, JOIN 과 같은 복잡한 테이블 데이터 처리과정이 있는 경우에는 비적합합니다.

NoSQL은 RDBMS처럼 스키마가 정해져 있지않고 비정형적인 데이터를 저장하는데 유용합니다.

정형화된 데이터를 저장해도 되긴 하지만 비정형화된 데이터를 저장해서 Denormalization을 적극적으로 활용하는데에 큰 장점이 있습니다.

적극 Denormailzation을 활용하라는 의미는 기존의 RDBMS에서 정형화하여 모든 종속관계니 도메인 원자값이니 하는 정규화(Normalization)과정을 거쳤는데,

여기 DynamoDB에서는 그런 규약에 얽매히지 않고 데이터를 처리할 수 있는 환경을 구성할 수 있습니다. 단, 스토리지 용량은 늘어나긴 합니다.

DynamoDB는 자동으로 AWS의 Region별로 데이터를 가용영역 3곳에 보통 복제해서 저장을 합니다.

가용 영역 중에 하나가 장애가 발생하여 정지하더라도 DB를 정상적으로 사용이 가능합니다.

높은 가용성과 지속성을 제공하기때문에 사용자가 따로 데이터를 백업할 필요가 전혀 없습니다.

DBA입장에서 보면 엄청나게 큰 강점입니다.

DynamoDB의 저장할 수 있는 용량은 같은 AWS의 S3와 같이 무제한입니다.

데이터 용량이 증가하게되면 스토리지를 늘리고 클러스터를 확장하여 데이터를 분산합니다.

기존의 다른 데이터베이스를 사용하면, 용량이 커지면서 샤딩(Sharding)이라는 방법을 통해 테이블의 데이터를 여러 서버에 분산시키는 작업을 직접해야합니다.

DynamoDB는 Read/Write Thoughput을 직접지정할 수 있습니다. 트래픽이 증가하여 사용량이 많아지면 처리량을 늘리고, 사용량이 적어지면 처리량을 줄입니다.

지정한 처리량은 DynamoDB가 알아서 일관되게 유지합니다.

요금표는 http://aws.amazon.com/ko/dynamodb/pricing/ 여기를 참고하시면 됩니다.

DynamoDB의 모든 데이터는 SSD(Solid State Drive)에 저장하기에 손실될 위험과 성능의 보장이 가능한 이유 중에 하나가 됩니다.

* DynamoDB 테이블의 처리량의 변경

: 이미 생성된 DynamoDB 테이블의 처리량은 한 번에 최대 2배까지 높일 수 있습니다.

갑자기 트래픽이 많아져서 처리량을 높이려고 해도 기본 처리량이 낮게 설정된 상태에서는 한꺼번에 처리량을 높일 수 없습니다.

처리량을 높이는데에 반영 시간이 오래걸리므로 실무에서는 처리량을 적당히 높여놔야합니다.

처리량을 낮추는 횟수는 하루에 4번으로 제한됩니다.

그렇다고 비용면에서 너무 많은 부담을 안하셔도 됩니다. EC2를 이용해서 데이터 베이스를 돌리는 것보다 가격은 저렴합니다.

DynamoDB의 데이터 모델 기본 개념

기본적으로 구성요소에 대한 개념으로는 Table, Item, Attribute가 있습니다.

일단 하나하나씩 구성요소에 대해서 설명하겠습니다.

1) Table

– Table은 Item들의 모임.

– 들어갈 수 있는 아이템의 개수의 제한은 없습니다.

– 그리고 Table은 기본키를 반드시 지정을 해야합니다.

– 리전 당 생성할 수 있는 최대 갯수는 256개.

– AWS에 요청하여 더 늘릴 순 있습니다.

2) Item

– Item은 Attribute들의 모임.

– 들어갈 수 있는 Attribute의 개수는 제한이 없음.

– 아이템의 크기는 속성이름과 값을 포함하여, 64KB까지 입니다.

– 기본 키는 필수로 포함하고 있어야하고 복합키와 기타 속성을 가질 수 있습니다.

3) Attribute

– Attribute는 Key-Value 방식입니다. Key는 문자열이라야 합니다.

– Attribute이 지원하는 값 데이터 형식은 1) 스칼라 데이터 형식(Scalar data types) 2) 다중 값 형식(Multi-valued types) 두가지 입니다.

– 1) 스칼라 데이터 형식(Scalar data types) : 숫자(Number), 문자열(String), 바이너리(Binary)가 있습니다.

* 숫자 : 정수와 실수를 지원하며 실수는 소수점 이하 38자리입니다. 숫자는 0을 트림(Trim)해서 다룹니다. 예를 들어, 0.3->.3 , 00300->300

* 문자열 : UTF-8 형식이고 대소를 비교할 때는 ASCII Code를 기준이로 합니다.

* 바이너리 : 바이너리 데이터는 BASE64 형식으로 인코딩하여 저장하면 됩니다. 대소를 비교할 때는 각 바이트를 부호없는 정수로 취급합니다.

– 2) 다중 값 형식(Multi-valued types) : 스칼라 데이터 형식의 배열 형태로, 숫자 세트(Number Set), 문자열 세트(String Set), 바이너리 세트(Binary Set)가 있습니다.

* 다중 값 형식은 들어가는 값이 중복될 수 없으며, 값이 하나라도 들어가 있어야 합니다..

* 값들은 정렬되지 않고 정렬 순서도 저장되지 않습니다.

* 다중 값 형식은 기본 키로 사용할 수 없습니다.

* NULL이나 빈 문자열은 저장이 불가합니다.

DynamoDB 사용 로직

DynamoDB에서 검색을 하려면 기본키로 인덱스를 생성해야합니다. 기본키는 테이블이 생성될 때 무조건 반드시 지정되어야하고,

이 기본 키로 생성되는 인덱스를 테이블 인덱스라고 합니다.

기본키 형식은 두가지 키를 복합적으로 사용하는 방식쓰는데 설명하자면,

1) Hash 형식 기본키 : Attribute 하나를 기본 키로 사용. 키본 키의 값은 스칼라 데이터 형식만 가능. 다중값 형식은 지원하지 않습니다.

2) Hash와 Range 형식 기본키 : Attribute 2개를 기본키로 사용(복합키), 첫 Attribute은 해시 기본키로 사용, 두번째 Attribute는 범위 기본 키로 사용합니다.

해시 기본키는 일치(Equal)방식의 검색만 지원합니다.

범위 기본키는 일치. 부등호, 포함, ~로 시작하는 범위를 지정할 수 있는 검색을 지원합니다.

해시 기본 키 Attribute의 최대 크기는 2048Bytes(2MB)이고, 범위 기본 키 Attribute의 크기는 1024Bytes(1MB)입니다.

DynamoDB는 기본키로 생성하는 테이블 인덱스 이외에도, 보조 인덱스인 Secondary Index를 생성할 수 있습니다.

기본 키로 생성한 인덱스 하나만으로는 검색기능이 부족합니다.

보조 인덱스는 사용이 빈번하기 때문에 성능을 위해서 사용하고 Read/Write 용량 유닛을 따로 설정이 가능합니다.

보조 인덱스는 두가지로 나뉩니다.

1) Local Secondary Index 2) Global Secondary Index

각 보조 인덱스를 하나씩 설명하겠습니다.

1) 로컬 보조 인덱스(Local Secondary Index)

해시 키는 테이블 인덱스의 해시 키본 키와 같고, 범위 키는 목적에 따라 다르게 설정 가능합니다.

로컬 보조 인덱스는 테이블당 5개까지 생성이 가능하고, 테이블을 생성할 때 함께 생성해야 하며,

테이블이 생성된 이후에는 추가, 수정, 삭제가 되지 않습니다.

로컬 보조 인덱스는 테이블에서 해시 기본 키와 범위 기본키를 사용할 때만 사용할 수 있습니다.

2) 글로벌 보조 인덱스(Global Secondary Index)

해시 키와 범위 키 모두 테이블 인덱스와 다르게 설정한 것.

범위키는 생략 가능하다.

테이블당 5개까지 생성이 가능합니다.

글로벌 보조 인덱스는 테이블 생성시 함께 생성해야하고 테이블이 생성된 이후는 추가, 수정, 삭제가 가능합니다.

두가지 보조 인덱스 키의 차이점은 해시키와 범위키와 상관없이 인덱스 기능을 하기 위해 검색을 사용하는데,

검색 기능을 하나의 테이블에서 로컬하게 해시키를 기본키를 두고 인덱싱을 할 것인가?

아니면 모든 테이블에 완전 따로 해시 키, 범위 키와 다르게 설정해서 사용하는 것인 가에 차이입니다.

DynamoDB는 데이터를 읽을 때,

1) Eventually Consistent Read

2) Strongly Consistent Read

를 사용가능합니다.

1) Eventually Consistent Read

: 읽기 처리량(Read Throughput)을 최대화하지만 읽은 데이터가 최근 완료된 쓰기 결과를 반영하지 못했을 수 있습니다.

쓰기가 데이터의 모든 복사본에 반영되는 것은 1초내에 이루어지는데, 최신 데이터를 얻으려면 짧은 시간 내에 읽기를 반복해야 합니다.

2) Strongly Consistent Read

: 위의 Eventually Consistent Read 에서 가지는 복사본에 반영되는 데이터의 시간 1초내에 읽기를 요청하는 경우,

데이터를 최신 데이터로 못가져오는 결과가 있는데 그러한 경우를 없애고 최근 완료된 쓰기 결과가 모두 반영된 데이터를 가져옵니다.

Provisioned Throughput은 사용자가 원하는 수치를 지정하면 DynamoDB가 알아서 지정된 수치만큼 처리량을 제공해주는 것을 말합니다.

– 필요한 읽기 용량 유닛(Read Capacity Units) : 초당 읽은 아이템 수 X KB 단위 아이템 크기 (근사치 반올림) (Eventually Consistent Read를 사용하는 경우 초당 읽은 아이템 용량은 두배가 됩니다.)

– 필요한 쓰기 용량 유닛(Write Capacity Units) : 초당 쓴 아이템 수 X KB 단위 아이템 크기 (근사치 반올림)

으로 필요한 Read/Write Capacity Units을 설정합니다.

예를 들면,

512Bytes(1KB로 반올림 됨)을 초당 200개 항목을 읽거나(쓰면), 1KB X 200 = 200 유닛 필요,

1.6KB(2KB로 반올림 됨)을 초당 200개 항목을 읽거나(쓰면), 2KB X 200 = 400 유닛 필요.

예를 들어왔던 것들과 같이 유닛을 계산합니다.

Eventually Consistent Read는 500 읽기 용량 유닛으로 1KB 짜리 아이템을 1000번 읽을 수 있으며,

Strongly Consistent Read는 1000 읽기 용량 유닛으로 1KB짜리 아이템을 초당 1000번 읽을 수 있습니다.

그리고 읽기 용량의 유닛 수는 API 호출 수가 아닌 초당 읽은 아이템 수로 결정됩니다.

500 유닛을 읽는다라고 가정 하면,

1KB 짜리 아이템을 GetItem(아이템을 1개 읽는 메서드)로 500번 호출하는 것과,

BatchGetItem(아이템을 군집하여 읽는 메서드)를 호출하여 아이템을 10개씩 읽는 것으로하여 50번 호출하는 것과 같습니다.

즉, API 호출의 수가 유닛의 수가 되지 않는다는 것입니다.

DynamoDB의 데이터 조회 방법은 두 가지입니다. 두 가지 모두 한 번에 조회할 수 있는 용량은 1MB입니다.

– Scan : 조건 없이 모든 데이터를 가져옵니다.

– Query : 해시(기본)키에 특정 값을 지정하고, 범위(기본)키에 조건을 지정하여 원하는 데이터를 가져옵니다. 범위(기본)키에 조건을 지정하는 것은 생략할 수 있습니다.

* DynamoDB의 제약 조건

DynamoDB의 기술적 제약 및 한계(Limit)에 대해서는 다음 링크를 참조하기 바랍니다.

http://docs.aws.amazon.com/amazondynamodb/lastest/developerguide/Limits.html

DynamoDB 사용 예시

Table 안에 어떤 식으로 구성이 되어있는지 보겠습니다.

다음과 같이 테이블 안에 item이 들어가 있고,

각 Item 안에는 기본 자료형이나 Document로 내부에 정의되어있습니다.

각 Item 내부의 구성은 같은 Table이라고 해도 굳이 같을 필요는 없습니다.

다음의 예에서 attack 속성이랑, defense 속성이랑 다르게 저장할 수 있습니다.

즉, 하나의 Table안에 있는 각 Item의 Attribute 구성은 다를 수 있습니다.

저장할 수 있는 데이터 유형

크게 두 가지의 데이터 유형을 다룰 수 있습니다.

– Key-Value Store Model

– Document Store Model

Key-Value Store Model에는

1) String(S)

2) Number(N)

3) Binary(B)

4) String Set(SS)

5) Number Set(NS)

6) Binary Set(BS)

이 사용, 저장이 가능하고,

Document Store Model에는

1) Boolean(BOOL)

2) Null(NULL)

3) List(L)

4) Map(M)

이 사용, 저장이 가능합니다.

다음으로 DynamoDB의 기본 키 사용에 대해서 크게 두가지 사용 형태에 대해서 설명하겠습니다.

1. 해시키만 사용하는 기본 키 형태 = 기본키(해시키)

2. 해시키와 범위기를 이용하는 기본 키 형태 = 기본키(해시키 + 범위키)

기본 키 (해시 키)

해시키를 기준으로 데이터를 분산시켜서 저장하고 데이터 모델을 보다 단순하게하고,

정렬을 하지 않고 사용하는 저장형태를 비정렬 형태를 띄게 됩니다.

기본 키인 Hash key는 고유 값을 가져야 합니다. 다른 키들과 중복 조회 되면 안됩니다.

키 안에 속하는 Element는 다를 수 있지만 기본 키인 Hash key는 달라야합니다.

달라야 하는 이유는 해시키를 기준으로 기본적인 데이터 모델링이 되어지는 기준이기 때문입니다.

그렇기 때문에 기본 키로 해시를 하나로만 설정되어 있는 경우에는 구분할 여지가 없어지기 때문에 해시키가 동일한 것이 있으면 안됩니다.

기본 키(해시키 + 범위키)

위에 기본 키를 해시 키로만 사용했을 경우에는 해시키가 동일하면 저장자체가 안되는 경우가 발생했습니다.

지금 설명하는 복합 키는 그 점을 해결합니다.

해시 키와 범위 키를 복합 기본 키로 설정해서 사용할 수 있습니다. 기본키의 경우에는 데이터 모델 복합 / 정렬 / 범위 값을 이용한 조회가 가능합니다.

구성되는 해시 키와 범위 키의 복합 기본키의 형태는 다음과 같습니다.

그런데 해시와 범위 키를 이용하면 복합 키로써 기본키가 설정이 되어지기 때문에 해시키가 같고 범위키가 다른 경우가 가능합니다.

즉, 위에서 기본 키로 해시키만을 사용하던 경우에서 해결하지 못했던 중복된 해시 키에 대한 해결책을 제시하는 것입니다.

다음은 범위키를 추가함으로써 해시키를 중복되게 사용할 수 있는 모습을 보여줍니다.

또한, 로컬 보조 인덱스 = 범위키를 대안으로 사용할 수 있는 LSI(Local Secondary Index) 가 있습니다.

LSI는 범위키를 사용하는데 어떤 범위에 들어가 있는 들어가 있는지를 구분하여 쿼리하는 데에 사용할 수 있습니다.

다음은 해시 키가 같은 Item에 대해서 LSI를 Date를 기록하는 형식으로 사용하여 검색할 수 있습니다.

보조 인덱스로 사용하는데에 Local Secondary Index 와 Global Secondary Index 가 있습니다.

위에서 범위키를 이용해서 같은 테이블 안에서 Date를 Local Secondary Index로 사용해서 쿼리를 하여 사용하는 것을 보았고,

GSI(Global Secondary Index)에 대해서 이야기 하겠습니다. 다음과 같은 그림으로 보여집니다.

다음 그림은 딱히 바로 이해가 가지 않는 관계로 쉽게 설명하면 동일 테이블에 해시 키를 변경하면서 그 안으로 GSI의 값을 넣어서 보조 인덱스로 활용하겠다는 것입니다.

위의 그림이 너무 어려워서 아래에 예를 든 그림을 보고 설명을 하겠습니다.

상단에 뒷 부분으로 가려진 테이블이 기본에 테이블이고, 여기에 GSI를 넣어서 활용하기 위해서 테이블을 바꾸는 과정입니다.

(=>는 이동함을 뜻합니다.)

해시 키=> 범위키

범위키=>속성

LSI=>속성

메인 식별 기본키를 GSI(Global Secondary Index)로 활용하는 방식입니다.

프로비저닝된 처리 용량

프로비저닝된 처리 용량 조정이 자유롭기 까진 아니더라도 서비스의 요청이 몰려 트래픽이 몰리는 경우 동적으로 조정이 가능합니다.

프로비저닝이라는 뜻은 “특정한 서비스를 제공받기 위해서 서비스의 실행부터 시작해서 서비스를 제공받기 전 단계까지의 처리되는 일련의 절차를 말합니다.”.

즉, AWS에서 말하고자 하는 것은 우리가 떠먹여줄게 원하는 만큼 편하게 조절해서 사용해라는 뜻입니다.

앞서 이야기 한 것처럼 Write Capacity units, Read Capacity units을 조절할 수 있습니다.

단점은, 올릴때는 편리하게 되는데 내릴 때는 제약이 있습니다.

다음은 프로비저닝된 처리 용량에 대한 상하향 정책입니다. AWS Manual에서 캡쳐한 그림입니다.

DynamoDB Streams

DynamoDB Streams에 대해서 이야기 하겠습니다.

DynamoDB는 데이터를 저장하는 방식이 Stream 형식으로 다룹니다. 즉, FIFO 형식으로 저장이 됩니다.

먼저 들어온 정보가 먼저 바뀌고 하나의 Stream으로 다루기 때문에 다음 그림에서 나오는 장점들을 가지게 됩니다.

비동기 식으로 끊어서 테이블에 정보를 저장할 수 있기때문에 높은 내구성을 가질 수 있고,

따로 따로 저장이 가능하기에 확장할 때도 편리합니다. 순서가 부여되어 있기때문에 처리 저장시에 기준은 동기적으로 에러없이 저장될 수 있습니다.

DynamoDB Stream 데이터 읽기 및 프로세싱

요청에 대해서 다음과 같이 Stream을 활용해서 저장을 합니다.

DynamoDB의 Cross Region Replication을 통한 글로벌 DB 복제/동기화

다음과 같이 현재 Tokyo의 리전에 있는 DynamoDB의 데이터들을 다른 리전으로 옮길 수 있습니다.

DynamoDB의 Point-In-Time Recovery를 통한 DynamoDB Table 시점 복구

DynamoDB는 해당 테이블 단위로 저장하는 Stream 구조를 활용해서 Recovery Table을 활용해서 원하는 해당 시점의 Table 상태로 복구할 수 있습니다.

이상 가장 기본이 되는 AWS의 DynamoDB의 가장 기본적인 개념에 대해서 설명을 마치겠습니다.

* Reference

1. DynamoDB의 데이터 모델 – http://pyrasis.com/book/TheArtOfAmazonWebServices/Chapter14/01

2. 그림자료 – AWS 공식 사이트

DynamoDB 장단점과 DynamoDB를 시작 전에 알면 좋은 11가지

DynamoDB 장단점과 DynamoDB를 시작 전에 알면 좋은 11가지

앞서 포스팅 한 것에 이어 해당 포스팅도 사내에서 발표했던 내용을 정리하여 포스팅 한 것입니다.

DynamoDB 장단점

장점

데이터가 key-value 형태로 저장된다. JSON file로 저장되는 개념이라 사용하기 간편하다.

key-value 형태 이므로 READ 속도가 빠르다. (10ms 이하의 읽기 및 쓰기 성능)

확장성이 좋다.(수평적. 초당 수천 건의 요청 처리 가능)

속성에 대한 추가와 변경이 자유롭다.

완전 관리형 서비스이므로 운영 부담이 발생하지 않는다.

요청 수에 따라 원활하게 확장되기 때문에 비용 효율적이고 IO 작업을 원활하게 지원한다.

성능과 가용성을 위해 데이터를 3곳의 가용 영역에 복제하여 저장하고 있다.

단점

데이터들 간의 관계(relation)가 없기 때문에 같은 데이터가 여러 컬렉션에 중복되어 들어있을 수 있다. update가 일어날 경우 모든 테이블에서 작업해주어야 한다.

큰 REST API 서비스를 운영할 경우 이를 처리할 수 있는 체계적인 API가 제공되지 않는다.

ORM 지원 라이브러리도 없고, 있다 하더라도 메이저하지도 않아서 쓰기 힘들 수 있다. ORMODM : ORM과 동일하게 객체 관계로 정의한 내용을 NoSQL 형태로 매핑해주는 도우미 역할 ( MongoDB에는 Mongoose가 있다 ) ORM : 객체와 관계형 데이터베이스의 데이터를 자동으로 매핑해주는 도우미 역할

여러 쿼리에 대해 일관성, 원자성을 보장하지 않는다. 즉, Transaction 이 없다. 전략으로 사용해야한다.

러닝커브

사용 사례

모바일 애플리케이션 – 애플리케이션 데이터 및 세션 상태 저장

게임 애플리케이션 – 사용자 기본 설정 및 앱 상태 저장 / 플레이어의 게임 상태 저장

애플리케이션 모니터링 – 애플리케이션 로그 및 이벤트 데이터 저장 / JSON 데이터

사용 사례

게임 서비스 사용 사례 및 설계 모델

여러 글로벌 게임 서비스 업체들이 게임 상태, 플레이어 데이터, 세션 기록 및 리더보드 등 게임 플랫폼의 모든 부분에 DynamoDB를 사용하고있다. DynamoDB를 선택함으로써 얻는 이점은 수백만 명의 동시 사용자 및 요청을 지원하는 동시에 밀리초 수준의 액세스 지연 시간을 유지할 수 있다는 점이다.

EA : MySQL 클러스너로 구성되던 이전 DB에 비해 90%의 비용을 절감사용자 ID를 파티션 및 기본 키로 사용해 (1:1 모델링 패턴) 사용자 데이터 및 게임 인벤토리를 저장한다.

PennyPop : 분당 얼마 처리하지 못했던 요청 수를 DynamoDB를 사용하면서 80,000회 까지 수준을 확대시켰다. 또한 완전 관리형 서비스를 사용함으로써 DB를 따로 관리할 여력이 되지 않는 기업이 추가 인력 없이도 서비스 개발에만 집중 할 수 있게 되었다.

Riot Games : 날짜 및 시간 기준의 빠른 검색이 필요한 게임 플레이어의 데이터를 DynamoDB에 두고 구체화된 뷰를 생성하여 빠른 검색을 제공했다. 기존 DB(Vertica)에서 수 분이 걸리던 단일 키 검색 작업은 1초 미만으로 단축되었다. (1:M 모델링 패턴) 파티션 키 : 플레이어 ID 정렬 키 : 마지막 로그인과 같은 날짜 및 시간

DynamoDB 를 시작 전에 알면 좋은 11가지

장점

1. Data Modeling

DynamoDB는 Document 지향 데이터 모델을 지원해준다. 테이블을 생성하기 위해 기본키를 정의하기만하면 된다. 동적 속성 집합을 사용하여 이러한 테이블에 항목을 추가가 가능하다.

DynamoDB의 Items은 SQL의 row에 해당하고 DynamoDB의 attributes는 SQL의 Column에 해당한다.

DynamoDB는 다음 Data Type을 지원한다

스칼라 데이터 유형 : Number, String, Binary, , Boolean

컬렉션 데이터 유형 : Set, List , Map

2. Operational Ease(운영 용이성)

관리 서비스 덕분에 사용자는 기본 인프라에서 추상화되고 원격 끝점을 통해서만 데이터베이스와 상호작용한다. 하드웨어 프로비저닝, 설정/구성 , 처리량 용량 계획 등 클러스터 확장과 운영 문제에 대해 걱정할 필요가 없으므로 시작하기 쉽다 .

. 실제로 인스턴스나 디스크와 같은 기본 인프라 구성 요소에 액세스 할 수 잇는 방법이 없다. DynamoDB 테이블을 사용하려면 사용자가 읽기 용량 단위( read capacity units(RCUs)) 및 write capacity units(WCU)를 미리 예약해야한다. 사용자는 예약된 처리 용량에 대해 시간당 요금이 부과가된다.

3. Linear Scalability (선형 확장성)

DynamoDB는 Auto Sharding 과 load-balancing 을 지원한다. 이를 통해 애플리케이션은 계속 증가하는 대용량 데이터를 투명하게 저장이 가능하다. 그러나 특정 지점을 넘어서는 천문학적 비용이 발생한다

4. AWS Ecosystem Integration( AWS 생태계 통합)

DynamoDB는 AWS 생태계에 잘 통합되어있다.

통합의 몇가지 예시)

데이터를 쉽고 효율적인 비용으로 S3에 백업 을 할 수 있다.

을 할 수 있다. 분석을 위해 Elastic MapReduce(EMR)로 데이터를 내보낼 수 있다.

보안 및 액세스 제어가 AWS IAM에 통합이된다.

단점

5. Cost Effectiveness(비용 효율성)

DynamoDB의 요금 모델은 빠르게 성장하는 회사에서 가장 비싼 단일 AWS 서비스로 만들 수 있다.

비싼이유 6가지 주요 이유

1. Over-provisioning to handle hot partitions(Hot Partition 을 처리 하기 위한 오버 프로비저닝)

DynamoDB에서 프로비저닝된 총 IOPS(Input/Output Operations Per Second, HDD, SSD, SAN같은 컴퓨터 저장 장치를 벤치마크하는 데 사용되는 성능 측정 단위) 는 모든 파티션에 고르게 분배된다. 따라서 이러한 파티션에 읽기 및 쓰기를 고르게 분배할 파티션 키를 선택하는 것이 매우 중요하다. 테이블에 더 많은 IOPS가 필요한 몇 개의 핫 파티션이 있는 경우 프로비저닝된 총 처리량은 가장 핫한 파티션에 필요한 처리량으로 모든 파티션이 프로비저닝 되도록 충분히 높아야한다. 이로인해 비용이 크게 증가한다.

2. Cost explosion for fast growing datasets(빠르게 성장하는 데이터 세트에 대한 비용 폭발)

“DynamoDB를 사용하면 안된다” 라는 게시물에서 DynamoDB가 빠르게 성장하는 데이터 세트에 적합하지 않는 이유를 강조한다. 데이터가 늘어남에 따라 데이터를 자동으로 확장하기 위해서 파티션수도 늘어나는데 테이블에 대해 프로비저닝된 총 처리량은 증가하지 않는다. 따라서 각 파티션에 사용할 수 있는 처리량은 데이터가 증가함에 따라 지속적으로 감소되는데 기존 쿼리 속도를 따라잡으려면 총 처리량이 지속적으로 증가해야하므로 비용이 몇 배나 증가하게 된다.

3. Paid caching tier (유료 캐싱 계층)

DynamoDB의 latency가 충분히 낮지 않은 경우 성능을 높이려면 캐시(**DAX[Amazon DynamoDB Accelerator]** 또는 ElasticCache)로 지연 시간을 늘려야한다. 두 경우 모두 캐싱 계층은 데이터베이스 계층 외에 추가 비용이다.

4. Indexes may cost extra (인덱스 추가 비용)

기본키의 일부가 아닌 속성에 대한 데이터를 쿼리하려는 애플리케이션은 보조 인덱스를 생성해야한다. DynamoDB는 Local Secondary Index 와 Global Secondary Index 를 지원한다. Local Secondary Index에는 추가 비용이 발생하지 않지만 Global Secondary Index는 추가 read 및 write 용량 프로비저닝이 필요하므로 추가 비용이 발생한다.

5. Writes, strongly consistent reads and scans are expensive(Write, 읽기 및 스캔 비용이 많이든다)

첫째, “DynamoDB Write 비용이 비싸다”

둘째, 강력한 일관성 write는 최종 일관성 읽기 비용의 두 배 (강력한 일관성 읽기, 최종적 일관성 읽기) 강력한 일관성 읽기 강력한 일관성 읽기를 요청하면 DynamoDB는 성공한 모든 이전 쓰기 작업의 업데이트가 반영된 최신 데이터를 포함하는 응답을 반환한다. 최종적 일관성 읽기 DynamoDB 테이블에서 데이터를 읽을 때 , 응답에 최근 완료된 쓰기 작업의 결과가 반영되지 않을 수 있다. 응답에는 부실 데이터가 일부 포함이 될 수 있다. 잠시 후 읽기 요청을 반복하면 응답이 최신 데이터를 반환한다.

(강력한 일관성 읽기, 최종적 일관성 읽기) 셋째, 스캔을 수행하는 워크로드는 순식간에 엄청난 비용 이 들 수 있다. 이는 read capacity unit 이 실제로 읽은 바이트 수를 고려하기 때문

이 들 수 있다.

6. Lack of lower cost test/dev tables(더 저렴한 테스트/ 개발 테이블 부족)

DynamoDB 는 관리형 서비스이므로 고객 대면 프로덕션 테이블과 개발/테스트/스테이징 테이블을 실제로 구분하지 않는다.

6. Low Latency Reads(짧은 지연 시간 읽기)

기본으로 제공되는 분산 캐시가 없기 때문에 DynamoDB의 일반적인 지연시간은 10ms~20ms범위이다. 강력한 일관된 읽기는 일반적으로 최종 일관성 읽기보다 latency가 더 길다.

이러한 Latency가 길어질 경우에 추가적으로 캐싱 계층(DAX)을 사용하거나 redis 를 사용한다. 또 다른 AWS 서비스인 별도의 ElasticCache를 프로비저닝하려면 1ms 이하의 지연 시간이 필요한 대규모 애플리케이션이 필요하다. 앱이 캐시를 채우고 데이터베이스와 캐시의 일관성을 유지하는 추가적인 복잡성을 처리해야 하기 때문에 이러한 서비스는 추가 비용이 들어가며 데이터 일관성 및 개발자 대비성이 저하된다.

7. Geo-Distribution (지리적 분포)

2017년 이후 도입된 글로벌 테이블은 DynamoDB에 지리적 분포를 추가하기 위한 주요 기능이다. 각 지역에는 동일하지만 독립적인 테이블이 있고 이러한 모든 테이블은 자동화된 비동기식 복제 메커니즘으로 연결되어 “글로벌 테이블” 이라는 개념으로 이어진다. 지역 간 동시 쓰기는 데이터 손실로 이어지고 읽기는 해당 지역에서 강력하게 일관될 수 없다.

8. Development Agility (개발 민첩성)

마이크로 서비스 패러다임은 소프트웨어 개발 민첩성을 높이고 릴리즈 주기를 가속화 하기 위해 널리 채택되고 있다. 마이크로 서비스 지향 아키텍처에서 각 마이크로 서비스는 서로 독립적으로 데이터를 읽고 쓰는 경향이 있다. 예시로 데이터가 캐시되더라도 DB의 총 IOPS가 증가한다. 그 결과로 훨씬 더 높은 IOPS에 대해 테이블이 프로비저닝되어 비용이 매우 많이든다.

강력한 CI/CD 파이프 라인을 설정하는 것은 릴리즈 주기를 가속화하는 또 다른 중요한 패러다임이다. DynamoDB는 관리형 서비스이므로 CI/CD를 설정하기가 매우 어렵다.(예로 애플리케이션이 DB의 오류 영향을 받는지 안 받는지 확인한다)

9. Troubleshooting in Production (프로덕션에서의 문제 해결)

관리형 서비스는 모든 것이 동작할 때 좋은 제안이지만 그러나 문제 해결에 직면하여 처리하기 어려울 수 있다. 문제가 발생하면 서비스 공급자(AWS)의 지원에 의존해야한다. 이것은 느리거나 비용이 많이 들 수 있다.

안티 패턴

10. Strong Consistency with High Availability(고가용성을 통한 강력한 일관성)

CAP 이론 관점에서 DynamoDB는 최종 쓰기 일관성이 있는 사용 가능 및 파티션 허용(AP)데이터베이스이다. 읽기 전면에서는 최종 일관성 읽기와 강력한 읽기를 모두 지원한다. 그러나 DynamoDB의 강력한 일관성 읽기는 네트워크 지연 및 파티션이 있을때 가용성이 높지 않다. 이러한 오류는 AWS와 같은 퍼블릭 클라우드에서 실행되는 다중 지역/글로벌 앱에서 일반적으로 DynamoDB는 단일 지역으로만 강력하게 일관된 읽기를 제한하여 이러한 오류를 줄이려고 한다. 결과적으로 DynamoDB는 대부분의 다중 지역 앱에 적합하지 않고 단일 지역 앱에도 신뢰할 수 없는 솔루션이 된다.

11. ACID Transactions and Secondary Indexes(ACID 트랜잭션 및 보조 인덱스)

DynamoDB는 ACID와 호환되지 않는다. ACID에서 ‘C'(일관성)와 ‘D'(내구성)만 제공한다. DynamoDB를 기반으로 ACID를 사용하는 방법의 예시이다. 그러나 애플리케이션 아키텍처가 매우 복잡해 질 수 있다.

DynamoDB의 Global Secondary Index는 최종적으로 일관성이 있으며 올바른 결과를 반환하지 않을 수 있다.

따라서 DynamoDB는 앱의 트랜잭션 부분을 처리하기 위해 별도의 RDBMS 계층이 필수인 대부분의 1세대 NoSQL 데이터베이스와 유사하다. FoundationDB 및 YugaByte DB(SQL도 지원) 와 같은 2세대 NoSQL 데이터베이스는 분산 트랜잭션 및 강력하게 일관된 보조 인덱스에 대한 기본 지원을 통해 이러한 문제를 해결한다.

AWS re:Invent 2018 이후 업데이트 : NoSQL DB가 트랜잭션이 되는 이유는 무엇인가? 이후 DynamoDB는 엄격하게 제한된 방식으로 트랜잭션을 지원

제한사항

단일 지역 테이블에만 사용 가능하다

최대 10개 항목 또는 4MB 데이터로 제한

클라이언트 제어 트랜잭션 없음

트랜잭션이 지원되더라도 일관된 보조 인덱스 없음

간단 요약표

Reference

효과적인 DynamoDB 디자인 및 활용

발생일: 2020.02.18

키워드: nosql, dynamodb, 다이나모디비

문제:

이번엔 디비를 NoSQL로 AWS의 DynamoDB를 사용해서 구성해보려고 한다.

아키텍처 디자인을 어떻게 해야할까 고민하던 차에, A가 리인벤트 동영상을 추천해줬는데 내용이 좋다.

youtu.be/8rEsuvdL17s

아래는 보면서 정리해둔 내용.

해결책:

– 한 애플리케이션에 한 개의 테이블

– 파티션 키는 데이터를 골고루 분산하는 용도로 (데이터 분배 결정)

– 고유 값이 많은 속성(카디널리티가 높은 속성)

– 균일한 비율로 무작위로 요청되는 속성

– 정렬 키는 기존 RDS에서 인덱스를 사용하는 느낌으로 (쿼리, 다양화)

– 1:n, m:n 관계 모델링에 활용

– 효율적/선택적 조회

– 범위 조회

– GSI (Global Secondary Index)

– 별도의 속성으로 파티션과 정렬키 설정 가능

– 인덱스 크기 제한 없고, 기존 테이블 대상으로 추가/삭제 가능

– Eventual consistent read 만 가능

– 테이블 당 5개까지 가능

– 테이블과 별도의 읽기/쓰기 용량(RCU/WCU) 할당

– 즉, 테이블 capacity는 충분한데 GSI capacity 가 부족하면 병목 발생

– LSI (Local Secondary Index)

– 테이블과 동일한 파티션키. 파티션 내에서 정렬

– 인덱스는 10기가 단위로 데이터와 함께 저장

– 테이블을 생성할 때만 설정할 수 있음 (추가/삭제 불가)

– 테이블에 할당된 RCU/WCU 사용

– Eventual + Strong consistent 선택 가능

– 테이블 당 5개까지 가능

– 읽기 용량 단위

– 1 RCU = 초당 4KB 처리 단위

– Eventual consistent = 2회

– Strong consistent = 1회

– 4KB로 올림 처리

– 예: item 크기가 7KB 면 8KB로 올림

– 즉, 가능하면 한 번에 많이 읽어와야 함

– 쓰기 용량 단위

– 1 WCU = 초당 1KB 처리

– 1KB 단위로 올림 처리

– 예: 100B 를 써도 1KB로 처리

– 즉, 가능하면 한 번에 많이 써야 함

– 조회 (Get, Query)

– eventual, strong consistent 선택 가능

– 1MB 단위로 응답

– 결과량이 1MB를 넘을 땐 LastEvaluatedKey 를 ExclusiveStartKey 로 활용

– PK 조회 (동일한 값 조회)

– 예: PK = 1

– SK 조회 (범위 값 조회)

– 예: SK in 10~20, SK beginwith ‘foo.’

– LSI 조회 (테이블 용량 소진)

– 예: PK = 1, LSI_SK = foo@bar

– GSI 조회 (별도 용량)

– GSI_PK: name = ‘foo’, GSI_SK: age > 20

– 조회 (Scan)

– 전체 테이블 필터 적용해서 선택적 조회

– 병렬 스캔 가능하지만 RCU 유의해야 함

– 모델링 (집계 처리의 예)

– 예를 들어, 음원의 상세 정보와 월별 다운로드 수를 함께 집계한다면,

– 음원 정보 아이템

– { PK: ‘song-129’, SK: ‘Details’, Title, Artist, … }

– 음원 집계 아이템

– { PK: ‘song-129’, SK: ‘Month-2020-02’, Month: ‘2020-02’, Downloads: 482320 }

– 여기서 가장 많이 다운로드 된 음원을 찾으려고 한다면, GSI 설정

– GSI_PK: Month = ‘2020-02′, ScanIndexForwarded = False, Limit = 1 로 조회

– 모델링 (키를 다양하게 조합하고 싶은 경우)

– PK = 아이디, SK = 집계를 원하는 공통 이름으로 설정 (타입), 속성은 타입에 따라 다름

– 예:

– { PK: ’emp-100′, SK: ‘master’, 이름, 기타 기본 정보}

– { PK: ’emp-100′, SK: ‘state:CA’, 이름, 캘리포니아 근속 정보 }

– { PK: ’emp-100, SK: ‘state:NY’, 이름, 뉴욕 근속 정보 }

– { PK: ’emp-100′, SK: ‘prevtitle:A’, 이름, 이전 타이틀 }

– { PK: ’emp-100′, SK: currtitle:B, 이름, 현재 타이틀 }

– SK + 이름 조합을 GSI로 설정

– 모델링 (결합 정렬키)

– 계층 관계를 적용해서 조회하고 싶다면, 정렬키 이름을 계층으로 설정

– 예: SK: ‘foo#bar#baz’

– 쓰기 샤딩

– 예를 들어, 한 디바이스에 요청이 몰릴 때

– 디바이스가 쓸 때, 샤드 개수를 서픽스로 붙여서 PK로 할당

– 디바이스 – 샤드 개수를 기록

– 비용

– 쓰기가 가장 비싼 작업

– TTL 을 활용한 삭제와 테이블 삭제는 무료

– 모든 데이터를 보관하려고 하지 말고, 장기간 보관이나 큰 데이터는 S3를 활용

– eventually consistent read 는 50% 저렴. 앱 단에서 잘 설계해서 활용하면 좋음

– 프리티어의 유효기간이 없음

– 25GB 스토리지 + 25 WCU, 25 RCU

– 월 2억 건 정도의 요청량임

– 규모가 커졌을 땐 예약 용량을 활용해서 절약하는 방법 있음

– 필요한 데이터만 읽기

– GSI는 Sparse Index 임 (즉, 데이터가 있는 것만 인덱스를 만듦)

– 아이템에 타입에 따라 필요한 정보를 넣은 후, GSI를 활용

– 한 번에 최대한 많이 쓰고, 필요한 것만 읽는 것이 좋음

– 필요에 따라 auto scaling 쓰면 절약할 수 있음

논의:

한 애플리케이션에 한 개의 테이블을 추천하다고 하는데, 적합한 애플리케이션의 단위는 뭘까?

발표에서는 음원 사이트를 예로 들었는데, 이 테이블에 유저 정보도 포함된 걸까?

글쎄… 지금 생각으론, 주요 서비스 단위로 생각해보면 어떨까 싶다.

예를 들어, 음원서비스라면 이런 식으로 테이블을 나눠야 하지 않을까….?

– 유저: 사용자 기본 정보, 즐겨찾기, 아티스트

– 음원

– 아티스트

– 플레이리스트

음원과 아티스트는 한 테이블에 넣는 게 좋을까… 애매하다.

2020.02.20 추가

이후에 좀 더 리서치를 해봤다.

– 발표에서 의미했던 건, 도메인 또는 MSA 당 한 개의 테이블이라고 이해하면 좋을 것 같다.

– 즉, 위에서 언급했던, 유저, 음원, 아티스트, 플레이리스트는 한 개의 테이블로 구성해도 좋겠다.

다이나모디비와 싱글 테이블 디자인에 대한 건 나중에 정리.

키워드에 대한 정보 다이나모 db

다음은 Bing에서 다이나모 db 주제에 대한 검색 결과입니다. 필요한 경우 더 읽을 수 있습니다.

이 기사는 인터넷의 다양한 출처에서 편집되었습니다. 이 기사가 유용했기를 바랍니다. 이 기사가 유용하다고 생각되면 공유하십시오. 매우 감사합니다!

사람들이 주제에 대해 자주 검색하는 키워드 Amazon Dynamo DB 활용하기 – 강민석:: AWS Database Modernization Day 온라인

  • 동영상
  • 공유
  • 카메라폰
  • 동영상폰
  • 무료
  • 올리기

Amazon #Dynamo #DB #활용하기 #- #강민석:: #AWS #Database #Modernization #Day #온라인


YouTube에서 다이나모 db 주제의 다른 동영상 보기

주제에 대한 기사를 시청해 주셔서 감사합니다 Amazon Dynamo DB 활용하기 – 강민석:: AWS Database Modernization Day 온라인 | 다이나모 db, 이 기사가 유용하다고 생각되면 공유하십시오, 매우 감사합니다.

Leave a Comment