본문으로 바로가기

DynamoDB 간단히 사용해보기

category AWS/☁️ AWS 2021. 4. 9. 05:39

설명이 매우 잘 되어 있다! 

docs.aws.amazon.com/ko_kr/amazondynamodb/latest/developerguide/Introduction.html

 

Amazon DynamoDB이란 무엇입니까? - Amazon DynamoDB

이 페이지에 작업이 필요하다는 점을 알려 주셔서 감사합니다. 실망시켜 드려 죄송합니다. 잠깐 시간을 내어 설명서를 향상시킬 수 있는 방법에 대해 말씀해 주십시오.

docs.aws.amazon.com

 

DynamoDB?

 

우선 DynamoDB의 전반적인 속성을 알아보자.

 

  • key-value 도큐먼트 기반 noSQL이다. 그래서 MongoDB와 자주 비교되곤한다.
  • 성능과 가용성을 위해 데이터를 AZ에 중복 저장한다. 
  • mongoDB는 도큐먼트 - 컬렉션(도큐먼트 모음)라고 하는데 dynamoDB에서는 아이템 - 테이블(아이템 모음)이라고 한다. 
  • mongoDB는 도큐먼트당 16MB 용량 제한이 있었지만 dynamoDB 아이템에는 용량에 제한이 없다.
  • 데이터 용량이 증가하면 알아서 확장된다. mongoDB과 같이 샤딩(데이터 분할 저장)을 직접 구성할 필요도 없다.
  • 단, 아이템을 구성하는 속성의 이름은 64KB, 속성의 크기는 400KB를 넘겨선 안된다. 동영상을 속성에 직접 때려 박는 일은 없어야 할 것이다...

 

자세한 용량 등 할당량은 아래를 참고하자.

docs.aws.amazon.com/ko_kr/amazondynamodb/latest/developerguide/Limits.html

 

dynamoDB의 기본적인 데이터 구조는 테이블을 생성하면서 쉽게 확인해볼 수 있다.

 

테이블 이름, 파티션 키(Partition key), 정렬 키(Sort key)가 존재하는 것을 확인할 수 있다. 

파티션키와 정렬키를 묶어서 기본키라고 부르고

파티션 키를 해시키, 정렬 키를 범위키라고도 부른다고 한다. 

 

파티션 키는 일치/불일치 검색만 지원하며 정렬 키는 일치, 부등호, 포함, ~로 시작 등의 다양한 방식의 검색을 지원한다고 한다.

기본키만 잘 설정해도 dynamoDB를 잘 쓸 수 있다고 한다!

 

 

  • 정렬키는 왜 필요함?

예를 들어, 동일한 Artist의 곡을 저장한다고 가정해보자. 나는 베토벤의 "엘리제를 위하여", "비창 3악장" 2개를 저장하고 싶다.

그렇다면 Artist는 어떤 item을 지정하는데 적합한 키는 아니다. 아이템을 고유하게 식별하지 못하기 때문이다.

 

아이템을 고유하게 식별하기 위한 문제에선 mongoDB에서는 모든 도큐먼트에 고유한 _id를 만들고 인덱스 설정을 함으로서 해결했는데  dynamoDB에서는 이 문제를 Sort key를 추가해서 검색이나마 쉽게 해주는 식으로 해결합니다 (해결은 아닌 것 같은데...). 특정 아티스트의 모든 곡에 대한 음악 테이블을 쿼리한 다음 해당 곡을 검색하는 식으로 노래를 고유하게 식별할 수 있게 됩니다.

 

그리고, 테이블을 생성하면서 설정할 수는 없지만, 필요에 따라 테이블 생성 후 Global Secondary Index를 생성할 수도 있다고 합니다.

docs.aws.amazon.com/amazondynamodb/latest/developerguide/getting-started-step-6.html

 

인덱스 매니징에 대해서는 여기를 참고해보자.

docs.aws.amazon.com/amazondynamodb/latest/developerguide/SQLtoNoSQL.Indexes.html

 

 

item update

항목 만들기를 눌러 도큐먼트 생성 가능. 물론 수작업이라서 급하게 특정 데이터를 수정해야만 하는 일이 아니면 건드릴 일이 없긴 하다.

생각해보면 자기 아이디 좀 변경해달라는 유저 요청 때문에 mongoDB atlas에 가서 직접 만져준 적은 있긴하다.

그리고 고유값인 key도 변경할 수 있긴 하지만 항목값을 무시를 체크해야 한다. (이런 일이 발생하지 않는게 좋다!)

https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/getting-started-step-2.html

 

 

 

Query, Scan

이 두 녀석이 뭐가 다른 건지 찾아보았다.

 

docs.aws.amazon.com/amazondynamodb/latest/developerguide/SQLtoNoSQL.ReadData.html

 

Key Differences When Reading Data from a Table - Amazon DynamoDB

With a relational database, you can use the SELECT statement to join data from multiple tables and return the results. Joins are fundamental to the relational model. To ensure that joins run efficiently, the database and its applications should be performa

docs.aws.amazon.com

scan : docs.aws.amazon.com/amazondynamodb/latest/developerguide/SQLtoNoSQL.ReadData.Scan.html

query : docs.aws.amazon.com/amazondynamodb/latest/developerguide/SQLtoNoSQL.ReadData.Query.html 

 

  • Query– 특정 파티션 키가있는 항목을 검색합니다. 이러한 항목 내에서 정렬 키(Sort Key)에 조건을 적용하고 데이터의 하위 집합 만 검색 할 수 있습니다. Query데이터가 저장된 파티션에 빠르고 효율적으로 액세스 할 수 있습니다. (자세한 내용은 파티션 및 데이터 배포를 참조하십시오.
  • Scan : 지정된 테이블의 모든 항목을 검색합니다. 그러니까, 조건 없이 일단 모두 다 불러 온 후 필터링합니다. 때문에 이 작업은 많은 양의 시스템 리소스를 소비 할 수 있으므로 큰 테이블에는 사용하지 않는 것이 좋다.

 

 

 


darren, dev blog
블로그 이미지 DarrenKwonDev 님의 블로그
VISITOR 오늘 / 전체