맨위로가기

아마존 다이나모DB

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

아마존 다이나모DB는 아마존에서 개발한 NoSQL 키-값 및 문서 데이터베이스 서비스이다. 2012년에 발표되었으며, 분산형 서비스 네트워크의 데이터베이스 접근 방식에서 비롯되었다. 다이나모DB는 키-값 저장소 모델을 사용하며, 테이블, 항목, 속성으로 데이터를 구성한다. 기본 키, 데이터 형식, 인덱스를 지원하며, 단일 테이블, 다중 테이블, 하이브리드 설계를 포함한 다양한 아키텍처 패턴을 제공한다. 성능을 최적화하기 위해 접근 패턴을 신중하게 계획해야 하며, 조인 연산을 직접 지원하지 않지만, 비정규화, 애플리케이션 레벨 조인, 외부 도구를 통해 유사한 결과를 얻을 수 있다. 다이나모DB는 해시 함수와 B-트리를 사용하여 데이터를 관리하며, 데이터 손실을 방지하기 위해 복제 및 2단계 백업 시스템을 갖추고 있다.

더 읽어볼만한 페이지

  • 클라우드 데이터베이스 - 아마존 레드시프트
  • 클라우드 데이터베이스 - 아마존 오로라
    아마존 오로라는 아마존 웹 서비스에서 제공하는 관계형 데이터베이스로, MySQL 및 PostgreSQL 호환성을 제공하며 자동 스토리지 확장, 데이터 복제, 빠른 데이터베이스 복제 기능을 갖춘 클라우드 환경에 최적화된 시스템이다.
  • 키-값 데이터베이스 - Memcached
    Memcached는 웹사이트의 데이터베이스 부하를 줄여 응답 시간을 개선하는 분산 메모리 객체 캐싱 시스템으로, 키-값 연관 배열 형태로 RAM에 데이터를 저장하여 빠른 접근성을 제공한다.
  • 키-값 데이터베이스 - LevelDB
    LevelDB는 구글에서 개발한 오픈 소스 키-값 저장소로, 키와 값을 임의의 바이트 배열로 저장하고 키 순서로 데이터를 정렬하여 관리하며, 쓰기 일괄 처리, 정/역방향 반복, 스내피 압축을 지원하여 구글 크롬, Riak, 비트코인 코어 등 다양한 분야에서 활용되고 마리아DB 10.0에서는 쿼리 가능한 스토리지 엔진을 제공한다.
  • 아마존 웹 서비스 - 아마존 알렉사
    아마존 알렉사는 아마존이 개발한 인공지능 음성 비서로, 스마트홈 기기 제어, 음악 스트리밍, 정보 검색 등의 기능을 제공하지만 개인 정보 보호 논란도 있으며, 아마존은 기능 확장과 수익성 개선을 위해 노력 중이다.
  • 아마존 웹 서비스 - 아마존 레드시프트
아마존 다이나모DB - [IT 관련 정보]에 관한 문서
개요
Amazon DynamoDB 로고
Amazon DynamoDB 로고
유형문서 지향 데이터베이스
키-값 데이터베이스
개발아마존닷컴
최초 출시일2012년 1월
프로그래밍 언어자바
운영 체제크로스 플랫폼
지원 언어영어, 일본어 등
라이선스사유
웹사이트http://aws.amazon.com/dynamodb/
상세 정보
특징빠른 속도
확장성
NoSQL 데이터베이스 서비스
용도인터넷 규모 애플리케이션

2. 역사

베르너 보겔스 아마존닷컴 최고 기술 책임자(CTO)는 2012년 발표에서 이 프로젝트의 동기를 밝혔다.[3] 아마존은 분산형 서비스 네트워크로 시작했다. 원래 서비스들은 서로의 데이터베이스에 직접 접근할 수 있었다. 이것이 엔지니어링 작업의 병목 현상이 되자, 서비스들은 이러한 직접 접근 방식에서 공개 API를 선호하는 방식으로 전환했다. 그럼에도 불구하고, 제3자 관계형 데이터베이스 관리 시스템은 아마존의 고객 기반을 처리하는 데 어려움을 겪었다. 이는 2004년[4][5] 연말 성수기에 여러 기술이 높은 트래픽에서 실패하면서 절정에 달했다.

기존 데이터베이스는 공간을 절약하기 위해 데이터를 더 작은 조각으로 분할하는 경우가 많지만, 검색 시 이러한 조각들을 결합하면 쿼리가 느려질 수 있다. 아마존의 많은 서비스는 데이터에 대한 기본 키 읽기를 주로 요구했으며, 속도가 최우선 과제였기에 이러한 조각들을 결합하는 것은 매우 부담스러웠다.[6]

아마존은 저장 효율성을 희생하는 대신, 내부 사용을 위해 구축된 가용성이 높은 키-값 저장소인 다이나모를 개발했다.[3] 다이나모는 엔지니어들이 필요로 하는 모든 것을 갖춘 것처럼 보였지만, 채택은 늦어졌다. 아마존의 개발자들은 S3 및 SimpleDB를 사용하여 "그냥 작동하는" 디자인 패턴을 선택했다. 이러한 시스템에는 눈에 띄는 설계 결함이 있었지만, 하드웨어를 프로비저닝하고 데이터를 확장 및 재분할하는 오버헤드는 요구하지 않았다. 아마존의 다음 NoSQL 기술인 다이나모DB는 이러한 데이터베이스 관리 작업을 자동화했다.

3. 데이터 모델

다이나모DB는 키-값 저장소(KVS) 모델을 채택하고 있으며, 데이터를 스프레드시트와 유사한 테이블로 구성한다. 각 테이블은 항목(행)을 포함하고, 각 항목은 속성(열)으로 구성된다. 각 항목에는 기본 키라고 하는 고유 식별자가 있어 테이블 내에서 항목을 찾는 데 도움이 된다.[7]

다이나모DB 테이블은 이 테이블에 저장된 데이터를 나타내는 항목들의 논리적 그룹이다. 다이나모DB는 NoSQL 특성을 가지고 있어, 테이블 내의 모든 항목이 미리 정의된 스키마를 따를 필요는 없다.[7]

항목(Item)은 테이블에서 고유하게 식별될 수 있는 속성의 집합이며, 속성(Attribute)은 그 자체가 키-값 쌍인 원자적 데이터 엔터티이다. 키(Key)는 항상 문자열(String) 유형이며, 값(Value)은 여러 데이터 유형 중 하나일 수 있다. 항목은 키(Keys)라고 하는 속성의 하위 집합을 사용하여 테이블에서 고유하게 식별된다.[7]

3. 1. 기본 키

다이나모DB 테이블의 기본 키(Primary Key)는 각 항목(Item)을 고유하게 식별하는 하나 이상의 속성(Attribute)으로 구성된다. 기본 키에는 두 가지 유형이 있다.

  • 파티션 키 (Partition Key): 단일 속성으로 구성되며, 다이나모DB는 이 키 값을 해시 함수에 넣어 항목이 저장될 파티션을 결정한다. 서로 다른 두 항목은 같은 파티션 키 값을 가질 수 없다.
  • 파티션 키와 정렬 키 (Sort Key): 두 개의 속성으로 구성된다. 첫 번째는 파티션 키, 두 번째는 정렬 키이다. 다이나모DB는 파티션 키로 항목이 저장될 파티션을 결정하고, 같은 파티션 키를 가진 항목들을 정렬 키 값에 따라 오름차순으로 정렬해 저장한다. 서로 다른 두 항목은 같은 파티션 키 값을 가질 수 있지만, 같은 파티션 키와 정렬 키 값을 동시에 가질 수는 없다.


정렬 키는 `begins_with` 쿼리를 사용하여 특정 범위의 항목을 조회하는 데 사용될 수 있다.[37]

3. 1. 1. 복합 정렬 키

정렬 키는 begins_with 쿼리를 사용하여 좁히기(범위 쿼리)가 가능하다.[37] 이러한 특성을 활용하여 계층적인 데이터 구조를 표현하고 쿼리할 수 있는데, 이를 복합 정렬 키라고 부른다.[38]

예를 들어 국가, 지역, 도시에 기반하여 도시 목록을 얻고자 할 때, `국가#지역#도시` 형식(예: `Japan#Tokyo#Shinjuku`, `Japan#Tokyo#Ikebukuro`)으로 정렬 키를 설정할 수 있다. `begins_with: Japan#Tokyo` 쿼리를 실행하면 `Shinjuku`와 `Ikebukuro`를 얻을 수 있고, `begins_with: Japan` 쿼리를 실행하면 일본의 모든 도시 목록을 얻을 수 있다.

3. 2. 데이터 형식

아마존 다이나모DB는 숫자, 문자열, 부울, 문서, 집합 데이터 형식을 지원한다.[8]

3. 3. 인덱스

다이나모DB 테이블의 기본 키는 기본 인덱스이다. 보조 인덱스는 기본 인덱스인 분할 키 또는 정렬 키와 다른 속성에 정의된다. 보조 인덱스에는 로컬 보조 인덱스와 전역 보조 인덱스가 있다.[7]

인덱스 종류설명
기본 인덱스테이블의 기본 키
보조 인덱스기본 키 이외의 속성으로 정의.


3. 3. 1. 로컬 보조 인덱스 (LSI)

로컬 보조 인덱스는 기본 인덱스와 동일한 파티션 키를 갖지만 다른 정렬 키를 갖는다.[7]

3. 3. 2. 전역 보조 인덱스 (GSI)

전역 보조 인덱스는 기본 인덱스와 다른 분할 키를 갖는 보조 인덱스이다.[7]

4. 아키텍처 패턴

다이나모DB 데이터 모델링은 분산 시스템을 위해 설계된 NoSQL 데이터베이스 서비스인 아마존 다이나모DB에서 사용되는 아키텍처 접근 방식이다. 이러한 패턴은 다양한 데이터 구성 문제를 해결한다.[1] 다이나모DB는 키-값 저장소(KVS) 모델을 채택하고 있다.

주요 아키텍처 패턴은 다음과 같다:


  • 단일 테이블 설계: 다이나모DB의 400KB 항목 크기 제한을 준수하면서 관련 데이터를 통합한다.
  • 다중 테이블 설계: 접근 패턴과 데이터 모델 차이에 따라 데이터를 별개의 테이블로 분리한다.
  • 하이브리드 설계: 단일 테이블 설계와 다중 테이블 설계를 혼합하여 유연성과 효율성의 균형을 맞춘다.
  • 이벤트 소싱: 데이터 변경 사항을 불변 이벤트로 저장하여 기록 상태를 재구성할 수 있게 한다.
  • 구체화된 뷰: DynamoDB 스트림, 애플리케이션 수준 처리 또는 Lambda 함수를 사용한 주기적 배치 업데이트를 통해 구현되며, 사전 계산된 집계를 통해 분석 쿼리를 단순화한다.
  • 시계열 설계: 로깅 및 메트릭과 같은 워크로드에 최적화되어 있으며, 엔티티 식별을 위한 파티션 키와 시간 기반 데이터 세트의 효율적인 쿼리를 위한 타임스탬프를 나타내는 정렬 키를 사용한다.

4. 1. 단일 테이블 설계

웹 콘솔
웹 콘솔


단일 테이블 설계는 관련 데이터를 동일한 테이블에 저장하여 쿼리 효율성을 최적화하는 방식이다. 다이나모DB의 400KB 항목 크기 제한을 준수하면서 관련 데이터를 통합한다.[1] 이 방식은 동일한 파티션 키 아래에 관련 데이터를 함께 배치하여 접근 지연 시간을 줄일 수 있다.[1]

4. 2. 다중 테이블 설계

다중 테이블 설계는 접근 패턴과 데이터 모델 차이에 따라 데이터를 별개의 테이블로 분리하는 방식이다. 이 방식은 데이터를 목적별 테이블로 격리하여 관심사를 분리하고, 별개의 접근 패턴을 가질 수 있게 한다.[1]

4. 3. 하이브리드 설계

아마존 다이나모DB(DynamoDB)에서 사용되는 하이브리드 설계는 단일 테이블 설계와 다중 테이블 설계의 장점을 결합한 방식이다. 이 방식은 유연성과 효율성의 균형을 맞추는 것을 목표로 한다.[1]

단일 테이블 설계는 관련된 데이터를 같은 파티션 키 아래에 배치하여 쿼리 효율성을 높이고 접근 지연 시간을 줄인다. 반면 다중 테이블 설계는 데이터를 목적별 테이블로 분리하여 관심사를 분리하고, 서로 다른 접근 패턴을 가진 데이터를 관리한다. 하이브리드 설계는 이 두 가지 설계를 혼합하여 사용한다.[1]

4. 4. 이벤트 소싱

아마존 다이나모DB의 데이터 모델링 패턴 중 하나인 이벤트 소싱은 데이터 변경 사항을 변경할 수 없는 이벤트로 저장한다. 이렇게 저장된 기록을 통해 특정 시점의 상태를 다시 만들 수 있다.[1]

4. 5. 구체화된 뷰

아마존 다이나모DB의 구체화된 뷰는 DynamoDB 스트림, 애플리케이션 수준 처리 또는 Lambda 함수를 사용한 주기적 배치 업데이트를 통해 구현되며, 사전 계산된 집계를 통해 분석 쿼리를 단순화한다.[1]

4. 6. 시계열 설계

로깅 및 메트릭과 같은 워크로드에 최적화된 설계 방식이다. 일반적으로 엔티티 식별을 위한 파티션 키와 시간 기반 데이터 세트를 효율적으로 쿼리하기 위한 타임스탬프를 나타내는 정렬 키를 사용한다.[1] 대량의 시계열 데이터를 효율적으로 저장하고 쿼리하기 위해 분할 및 정렬 전략을 사용한다.[1]

5. 성능 제한

아마존 다이나모DB의 단일 밀리초 대기 시간 주장은 주로 기본 키를 사용하여 개별 항목을 검색하거나 수정하는 `GetItem` 및 `PutItem`과 같은 간단한 작업에 적용된다. 이는 균등한 파티션 분포와 충분한 처리량 프로비저닝과 같은 이상적인 조건에서 평균 대기 시간을 반영하며, 다이나모DB 엔드포인트와의 통신 중에 발생하는 전송 오버헤드는 고려하지 않는다. 필터가 있는 `Query`, `Scan` 또는 대용량 데이터 세트와 관련된 더 복잡한 작업은 추가적인 계산 및 데이터 전송 요구 사항으로 인해 대기 시간이 증가할 수 있다.

6. 개발 고려 사항

다이나모DB 개발 시 고려해야 할 사항은 다음과 같다.


  • 접근 패턴: 다이나모DB의 성능을 최적화하려면 데이터베이스 스키마를 설계할 때 접근 패턴을 신중하게 계획하고 분석해야 한다.[17][18][19][20] 인덱싱되지 않은 속성을 쿼리하면 전체 테이블 스캔이 발생하여 성능 저하가 발생할 수 있다.[18]
  • 조인 (Joins): 다이나모DB는 NoSQL 데이터베이스이므로 기본적으로 조인 연산을 지원하지 않는다. 따라서 비정규화, 복합 키, 애플리케이션 레벨 조인 등의 방법을 사용하여 조인과 유사한 결과를 얻어야 한다.[37] 아마존 EMR, 아테나(Athena)와 같은 외부 도구를 사용하여 조인과 유사한 연산을 수행할 수도 있다.[37]
  • 잠금 (Locking): 다이나모DB는 기본적으로 잠금을 지원하지 않지만, 낙관적 락 및 비관적 락과 같은 매커니즘을 통해 동시성 제어를 구현할 수 있다.[15][25][26][27]

6. 1. 접근 패턴

다이나모DB의 성능을 최적화하려면, 데이터베이스 스키마를 설계할 때 접근 패턴을 신중하게 계획하고 분석해야 한다. 여기에는 테이블을 생성하고 그에 따라 인덱스를 구성하는 작업이 포함된다.[17][18][19][20]

인덱싱되지 않은 속성을 쿼리할 때 다이나모DB는 전체 테이블 스캔을 수행하여 상당한 오버헤드가 발생한다. "필터" 작업을 사용할 때조차 다이나모DB는 필터를 적용하기 전에 전체 테이블을 스캔한다.[18]

기본 키를 구성하는 정렬 키는 쿼리 대상의 좁히기(범위 쿼리)에 이용할 수 있다.[37] 정렬 키는 `begins_with` 쿼리로 좁히기가 가능하므로, 계층성을 가진 속성을 연결(concat)한 것을 정렬 키로 설정함으로써 복수의 속성에 기반한 좁히기가 가능하다.[38] 이 정렬 키는 복합 정렬 키라고 불린다. 예를 들어 국가와 지역에 기반하여 도시 목록을 얻으려고 한다. 정렬 키로 `country#region#city` (예: `Japan#Tokyo#Shinjuku`, `Japan#Tokyo#Ikebukuro`)를 설정하고 `begins_with: Japan#Tokyo` 쿼리를 발행하면 `Shinjuku`와 `Ikebukuro`를 얻을 수 있다. `begins_with: Japan` 쿼리를 발행하면 일본의 모든 도시 목록을 얻을 수 있다.

6. 2. 조인 (Joins)

아마존 다이나모DB는 NoSQL 데이터베이스이므로 기본적으로 조인(Join) 연산을 지원하지 않는다. 그러나 아마존 EMR, 아테나(Athena), 아파치 스파크와 같은 외부 도구를 사용하여 조인과 유사한 연산을 수행할 수 있다.[37] 이러한 도구는 데이터베이스 외부에서 다이나모DB 데이터를 처리하여 분석 및 배치 작업에 SQL 스타일 조인을 허용하지만, 추가적인 복잡성과 지연 시간을 유발하여 실시간 또는 트랜잭션 사용 사례에는 적합하지 않다.

다이나모DB는 비정규화 및 단일 테이블 스키마를 권장하여 조인을 피하도록 설계되었다.[37]

6. 2. 1. 조인 우회 방법

아마존 다이나모DB는 단일 테이블, 고성능 액세스 패턴에 최적화된 NoSQL 데이터베이스이므로 기본적으로 조인 연산을 지원하지 않는다. 그러나 다음과 같은 방법으로 조인과 유사한 결과를 얻을 수 있다.[37]

  • 비정규화: 관련된 데이터를 단일 테이블로 결합한다.
  • 복합 키 또는 보조 인덱스: 관련 항목을 효율적으로 그룹화하고 쿼리할 수 있다.
  • 애플리케이션 레벨 조인: 여러 쿼리의 결과를 프로그래밍 방식으로 병합한다.
  • 단일 테이블 설계: 스키마 계획 단계에서 데이터를 미리 조인한다.
  • 외부 도구 (아마존 EMR, 아테나): 아마존 EMR(Amazon EMR) 및 아테나(Athena)와 같은 외부 도구를 사용하면 다이나모DB 외부에서 SQL 스타일의 조인을 사용할 수 있다.
  • 캐싱 솔루션 (DAX, OpenSearch): DAX(DynamoDB Accelerator, DAX) 또는 OpenSearch와 같은 캐싱 솔루션은 데이터를 미리 집계하고 캐싱하여 조인을 시뮬레이션할 수 있다.


기본 키를 구성하는 정렬 키는 쿼리 대상의 범위를 좁히는(범위 쿼리) 데 이용할 수 있다.[37] 정렬 키는 `begins_with` 쿼리로 좁힐 수 있으므로, 계층성을 가진 속성을 연결(concat)한 것을 정렬 키로 설정함으로써 복수의 속성에 기반한 좁히기가 가능하다.[38] 이 정렬 키는 복합 정렬 키라고 불린다. 예를 들어 국가와 지역에 기반하여 도시 목록을 얻으려고 할 때, 정렬 키로 `country#region#city` (예: `Japan#Tokyo#Shinjuku`, `Japan#Tokyo#Ikebukuro`)를 설정하고 `begins_with: Japan#Tokyo` 쿼리를 발행하면 `Shinjuku`와 `Ikebukuro`를 얻을 수 있다. `begins_with: Japan` 쿼리를 발행하면 일본의 모든 도시 목록을 얻을 수 있다.

6. 3. 잠금 (Locking)

다이나모DB는 기본적으로 잠금(Lock)을 지원하지 않지만, 다양한 메커니즘이 존재한다. 낙관적 락은 업데이트 전에 충돌을 방지하는 대신, 버전 번호를 사용하여 업데이트 후에 발생하는 충돌을 감지할 수 있다. 반면, 비관적 락은 `lockTime` 및 `lockedBy`와 같은 속성을 가진 조건부 업데이트를 포함할 수 있다. 이러한 속성은 Time to Live(TTL)와 결합될 때 만료된 잠금의 자동 제거를 가능하게 하여 이벤트 기반 아키텍처에서 동시성 관리를 잠재적으로 향상시킬 수 있다.[15][25][26][27]

7. 시스템 아키텍처

다이나모DB에서 테이블 생성


DynamoDB는 해시 함수와 B-트리를 사용하여 데이터를 관리한다. 데이터는 입력 시 파티션 키를 해싱하여 여러 파티션으로 분산된다. 각 파티션은 최대 10GB의 데이터를 저장할 수 있으며, 기본적으로 초당 1,000개의 쓰기 용량 단위(WCU)와 3,000개의 읽기 용량 단위(RCU)를 처리할 수 있다.[28] 1 RCU는 최대 4KB 크기 항목에 대해 초당 하나의 강력한 일관성 읽기 또는 초당 두 개의 결과적 일관성 읽기를 나타낸다.[29] 1 WCU는 최대 1KB 크기 항목에 대해 초당 한 번의 쓰기를 나타낸다.

데이터 손실을 방지하기 위해 DynamoDB는 복제 및 장기 스토리지를 갖춘 2단계 백업 시스템을 갖추고 있다.[30] 각 파티션은 해당 파티션의 데이터 복사본을 포함하는 3개의 노드로 구성된다. 각 노드에는 항목을 찾는 데 사용되는 B-트리와 노드에서 수행된 모든 변경 사항을 기록하는 복제 로그라는 두 가지 데이터 구조가 포함되어 있다. DynamoDB는 주기적으로 이러한 데이터 구조의 스냅샷을 생성하여 S3에 한 달 동안 저장하므로, 엔지니어는 데이터베이스의 특정 시점 복원을 수행할 수 있다.

각 파티션 내에서 세 개의 노드 중 하나는 "리더 노드"로 지정된다. 모든 쓰기 작업은 전파되기 전에 먼저 리더 노드를 거치므로 DynamoDB에서 쓰기는 일관성을 유지한다. 리더는 상태 유지를 위해 1.5초마다 다른 각 노드에 "하트비트"를 보낸다. 다른 노드가 하트비트 수신을 중지하면 새로운 리더 선출을 시작할 수 있다. DynamoDB는 리더 선출을 위해 팍소스 알고리즘을 사용한다.[30]

7. 1. 데이터 구조

DynamoDB는 데이터를 관리하기 위해 해시 함수와 B-트리를 사용한다. 데이터는 입력 시 파티션 키를 해싱하여 여러 파티션으로 분산된다. 각 파티션은 최대 10GB의 데이터를 저장할 수 있으며, 기본적으로 초당 1,000개의 쓰기 용량 단위(WCU)와 3,000개의 읽기 용량 단위(RCU)를 처리할 수 있다.[28] 1 RCU는 최대 4KB 크기 항목에 대해 초당 하나의 강력한 일관성 읽기 또는 초당 두 개의 결과적 일관성 읽기를 나타낸다.[29] 1 WCU는 최대 1KB 크기 항목에 대해 초당 한 번의 쓰기를 나타낸다.

데이터 손실을 방지하기 위해 DynamoDB는 복제 및 장기 스토리지를 갖춘 2단계 백업 시스템을 갖추고 있다.[30] 각 파티션은 해당 파티션의 데이터 복사본을 포함하는 3개의 노드로 구성된다. 각 노드에는 항목을 찾는 데 사용되는 B-트리와 노드에서 수행된 모든 변경 사항을 기록하는 복제 로그라는 두 가지 데이터 구조가 포함되어 있다. DynamoDB는 주기적으로 이러한 데이터 구조의 스냅샷을 생성하여 S3에 한 달 동안 저장하므로, 엔지니어는 데이터베이스의 특정 시점 복원을 수행할 수 있다.

각 파티션 내에서 세 개의 노드 중 하나는 "리더 노드"로 지정된다. 모든 쓰기 작업은 전파되기 전에 먼저 리더 노드를 거치므로 DynamoDB에서 쓰기는 일관성을 유지한다. 리더는 상태 유지를 위해 1.5초마다 다른 각 노드에 "하트비트"를 보낸다. 다른 노드가 하트비트 수신을 중지하면 새로운 리더 선출을 시작할 수 있다. DynamoDB는 리더 선출을 위해 팍소스 알고리즘을 사용한다.

7. 2. 리더 선출

DynamoDB의 각 파티션 내에서 세 개의 노드 중 하나는 "리더 노드"로 지정된다. 모든 쓰기 작업은 전파되기 전에 먼저 리더 노드를 거치므로, DynamoDB에서 쓰기는 일관성을 유지한다. 리더 노드는 상태 유지를 위해 1.5초마다 다른 각 노드에 "하트비트"를 보낸다. 다른 노드가 하트비트 수신을 중지하면 새로운 리더 선출을 시작할 수 있다. DynamoDB는 리더 선출을 위해 팍소스 알고리즘을 사용한다.[30]

7. 3. 자동 관리 (AutoAdmin)

AutoAdmin은 DynamoDB 팀이 데이터베이스 관리를 위해 구축한 서비스이다.[30] AutoAdmin은 응답하지 않는 노드를 다른 노드의 데이터 복사본으로 대체한다. 파티션이 RCU, WCU 또는 10GB의 세 가지 임계값 중 하나를 초과하면 AutoAdmin은 데이터를 더 세분화하기 위해 자동으로 파티션을 추가한다.[28]

7. 4. 인덱스 관리

DynamoDB는 관계형 모델의 인덱싱 시스템과 마찬가지로 테이블에 대한 모든 업데이트가 테이블의 각 인덱스에 반영되도록 요구한다. DynamoDB는 각 노드의 복제 로그를 구독하고 필요에 따라 인덱스에 Put, Update 및 Delete 요청을 추가로 전송하는 "로그 전파기"라는 서비스를 사용하여 이를 처리한다.[30] 인덱스는 쓰기 요청에 상당한 성능 저하를 초래하므로 DynamoDB는 사용자가 주어진 테이블에 대해 최대 5개의 인덱스만 허용한다.[31]

7. 5. 쿼리 실행

사용자가 쓰기 작업(Put, Update, Delete)을 실행하면, 요청은 다이나모DB 요청 라우터에 도달하여 인증 및 권한 부여 확인을 거친다.[30] 확인이 통과되면 시스템은 요청의 파티션 키를 해싱하여 해당 파티션에 도달한다.[30] 각 파티션에는 데이터 복사본이 있는 세 개의 노드가 있다. 시스템은 먼저 리더 노드에 쓰고, 두 번째 노드에 쓴 다음 "성공" 메시지를 보내고, 마지막으로 세 번째 노드로 전파를 계속한다.[30] 쓰기는 항상 리더 노드를 거치므로 일관성이 유지된다.[30]

로그 전파기는 모든 인덱스에 변경 사항을 전파한다. 인덱스의 기본 키 값을 가져와 해당 인덱스에 동일한 쓰기를 수행한다. 기존 항목을 업데이트하는 경우, 업데이트된 속성이 인덱스의 기본 키 역할을 할 수 있으므로 해당 인덱스의 B 트리를 업데이트해야 한다. B 트리는 삽입, 삭제, 읽기 작업만 처리하므로, 로그 전파기는 업데이트 작업을 받으면 모든 인덱스에 삭제 작업과 Put 작업을 모두 실행한다.

Get 작업을 실행하는 경우, 요청 라우터는 인증 및 권한 부여를 진행하고, 파티션 키를 해싱하여 해당 파티션에 도달한다. 다이나모DB는 사용자에게 일관적 읽기(Strongly Consistent Read)와 최종적 일관성 읽기(Eventually Consistent Read) 두 가지 옵션을 제공한다. 일관적 읽기는 리더 노드를 방문하지만, 읽기 위주 시스템에서는 단일 노드에 과부하가 걸려 가용성이 감소할 수 있다.

최종적 일관성 읽기는 임의의 노드를 선택한다. 이는 다이나모DB가 가용성을 위해 일관성을 일부 희생하는 부분이다. 쓰기 작업이 "성공"을 반환하고 세 번째 노드로 전파를 시작하지만 완료되지 않은 경우, 그리고 이 세 번째 노드를 대상으로 하는 Get이 있는 경우, 쓰기 작업의 전파 기간 내에 1/3의 불일치 가능성이 있다. 대부분의 경우 세 번째 노드는 리더의 밀리초 이내에 최신 상태를 유지한다.

참조

[1] 웹사이트 Amazon DynamoDB – a Fast and Scalable NoSQL Database Service Designed for Internet Scale Applications - All Things Distributed https://www.allthing[...] 2012-01-18
[2] 웹사이트 What is Amazon DynamoDB? https://docs.aws.ama[...]
[3] 웹사이트 Amazon DynamoDB – a Fast and Scalable NoSQL Database Service Designed for Internet Scale Applications http://www.allthings[...] 2012-01-21
[4] 웹사이트 How Amazon's DynamoDB helped reinvent databases https://www.networkw[...] 2023-11-30
[5] 웹사이트 Amazon Takes Another Pass at NoSQL with DynamoDB https://readwrite.co[...] 2023-11-30
[6] 간행물 Dynamo: Amazon's Highly Available Key–value Store 2007-10
[7] 웹사이트 Core components of Amazon DynamoDB - Amazon DynamoDB https://docs.aws.ama[...] 2023-05-28
[8] 웹사이트 Supported data types and naming rules in Amazon DynamoDB - Amazon DynamoDB https://docs.aws.ama[...] 2023-05-28
[9] 웹사이트 Creating a single-table design with Amazon DynamoDB https://aws.amazon.c[...]
[10] 웹사이트 Single-table vs. multi-table design in Amazon DynamoDB https://aws.amazon.c[...]
[11] 웹사이트 Data Modeling foundations in DynamoDB https://docs.aws.ama[...]
[12] 웹사이트 Best practices for handling time series data in DynamoDB https://docs.aws.ama[...]
[13] 웹사이트 AWS Prescriptive Guidance Enabling data persistence in microservices https://docs.aws.ama[...]
[14] 웹사이트 Build a CQRS event store with Amazon DynamoDB https://aws.amazon.c[...]
[15] 서적 Amazon DynamoDB - The Definitive Guide: Explore enterprise-ready, serverless NoSQL with predictable, scalable performance Packt Publishing 2024-08-30
[16] 웹사이트 Troubleshooting latency issues in Amazon DynamoDB https://docs.aws.ama[...]
[17] 웹사이트 Core components of Amazon DynamoDB https://docs.aws.ama[...]
[18] 웹사이트 Scanning tables in DynamoDB https://docs.aws.ama[...]
[19] 웹사이트 Improving data access with secondary indexes in DynamoDB https://docs.aws.ama[...]
[20] 웹사이트 Querying tables in DynamoDB https://docs.aws.ama[...]
[21] 서적 Serverless Programming Cookbook: Practical solutions to building serverless applications using Java and AWS Packt Publishing 2019-01-31
[22] 서적 Amazon DynamoDB - The Definitive Guide: Explore enterprise-ready, serverless NoSQL with predictable, scalable performance Packt Publishing 2024-08-30
[23] 웹사이트 Unsuitable workloads https://docs.aws.ama[...]
[24] 웹사이트 Querying data in DynamoDB https://docs.aws.ama[...]
[25] 웹사이트 Using expressions in DynamoDB https://docs.aws.ama[...]
[26] 웹사이트 Using time to live (TTL) in DynamoDB https://docs.aws.ama[...]
[27] 웹사이트 DynamoDB and optimistic locking with version number https://docs.aws.ama[...]
[28] 웹사이트 A Deep Dive into DynamoDB Partitions https://shinesolutio[...] 2019-08-03
[29] 웹사이트 Amazon DynamoDB Developer Guide https://docs.aws.ama[...] 2019-07-18
[30] Youtube AWS re:Invent 2018: Amazon DynamoDB Under the Hood: How We Built a Hyper-Scale Database (DAT321) https://www.youtube.[...] 2019-08-03
[31] 웹사이트 Service, account, and table quotas in Amazon DynamoDB - Amazon DynamoDB https://docs.aws.ama[...] 2024-01-09
[32] 웹사이트 Amazon switches on DynamoDB cloud database service http://www.zdnet.co.[...] 2012-01-19
[33] 문서 Amazon DynamoDB は、規模に関係なく数ミリ秒台のパフォーマンスを実現する、key-value およびドキュメントデータベースです。完全マネージド型マルチリージョン、マルチマスターで耐久性があるデータベースで… https://aws.amazon.c[...]
[34] 웹사이트 Amazon DynamoDB http://www.datastax.[...] Datastax.com 2012-01-18
[35] 웹사이트 Amazon DynamoDB – a Fast and Scalable NoSQL Database Service Designed for Internet Scale Applications http://www.allthings[...] 2012-01-18
[36] 웹사이트 Amazon Web Services ブログ: 【AWS発表】 Amazon DynamoDBが東京リージョンで利用可能に http://aws.typepad.c[...] 2014-10-28
[37] AWS AWS - DynamoDB - Developer Guide https://docs.aws.ama[...]
[38] AWS AWS - DynamoDB - Developer Guide https://docs.aws.ama[...]
[39] 웹인용 Amazon DynamoDB – a Fast and Scalable NoSQL Database Service Designed for Internet Scale Applications - All Things Distributed https://www.allthing[...]
[40] 웹인용 Amazon DynamoDB - FAQs https://aws.amazon.c[...]
[41] 웹인용 Amazon switches on DynamoDB cloud database service http://www.zdnet.co.[...] ZDNet 2012-01-21
[42] 웹인용 FAQs: Scalability, Availability & Durability https://aws.amazon.c[...]
[43] 웹인용 Amazon DynamoDB – a Fast and Scalable NoSQL Database Service Designed for Internet Scale Applications https://www.allthing[...] All Things Distributed blog 2012-01-21
[44] 웹인용 Amazon DynamoDB - FAQs https://aws.amazon.c[...] 2019-06-03



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com