DynamoDB를 위한 NoSQL 설계
Amazon DynamoDB와 같은 NoSQL 데이터베이스 시스템은 데이터 관리에 키-값 페어 또는 문서 스토리지와 같은 대체 모델을 사용합니다. 관계형 데이터베이스 관리 시스템을 DynamoDB와 같은 NoSQL 데이터베이스 시스템으로 교체할 때 주요 차이점과 설계에 있어 특정 접근법을 이해하는 것이 중요합니다.
관계형 데이터 설계와 NoSQL의 차이점
관계형 데이터베이스 시스템(RDBMS)과 NoSQL 데이터베이스는 각기 다른 장단점을 갖고 있습니다.
-
RDBMS에서는 데이터를 유연하게 쿼리할 수 있지만, 쿼리 비용이 상대적으로 높으며 트래픽이 많은 상황에서는 확장성이 떨어집니다(DynamoDB의 관계형 데이터를 모델링하는 첫 번째 단계 참조).
-
DynamoDB와 같은 NoSQL 데이터베이스에서는 몇 가지 방법으로 데이터를 효율적으로 쿼리할 수 있지만, 그 외에는 쿼리 비용이 높고 속도가 느립니다.
이런 차이가 두 시스템의 데이터베이스 설계를 다르게 만듭니다.
-
RDBMS의 경우, 세부적인 구현이나 성능을 걱정하지 않고 유연성을 목적으로 설계합니다. 일반적으로 쿼리 최적화가 스키마 설계에 영향을 미치지 않지만, 정규화가 중요합니다.
-
DynamoDB의 경우, 가장 중요하고 범용적인 쿼리를 가능한 빠르고 저렴하게 수행할 수 있도록 스키마를 설계합니다. 사용자의 데이터 구조는 사용자 비즈니스 사용 사례의 특정 요구 사항에 적합하도록 만듭니다.
NoSQL 설계의 두 가지 주요 개념
NoSQL 설계에는 RDBMS 설계와 다른 사고 방식이 요구됩니다. RDBMS의 경우, 액세스 패턴을 생각하지 않고 정규화된 데이터 모델을 생성할 수 있습니다. 그런 후 나중에 새로운 질문과 쿼리에 대한 요구 사항이 생길 때 이를 확장할 수 있습니다. 각 데이터 유형을 고유의 테이블에 구성할 수 있습니다.
NoSQL 설계의 차이점
-
대조적으로 대답해야 할 질문을 알기 전까지는 DynamoDB에 대한 스키마 설계를 시작할 수 없습니다. 사전에 비즈니스 문제와 애플리케이션 사용 사례를 이해해야 합니다.
-
DynamoDB 애플리케이션에서는 가능한 적은 수의 테이블을 유지해야 합니다. 테이블 수가 적을수록 확장성이 향상되고 권한 관리가 줄어들며 DynamoDB 애플리케이션의 오버헤드가 감소합니다. 백업 비용도 전반적으로 낮게 유지할 수 있습니다.
NoSQL 설계에 접근
DynamoDB 애플리케이션 설계의 첫 번째 단계는 시스템이 충족해야 하는 특정 쿼리 패턴을 파악하는 것입니다.
특히 시작을 하기 앞서 애플리케이션 액세스 패턴에서 3가지 기본적인 속성을 이해하는 것이 중요합니다.
-
데이터 크기: 저장해야 할 데이터의 양과 한 번에 요청할 데이터의 양을 알면 가장 효과적으로 데이터를 파티션(분할)하는 방법을 결정할 수 있습니다.
-
데이터 모양: 쿼리를 처리할 때 데이터를 변화시키는 대신(RDBMS 시스템의 방식), NoSQL 데이터베이스는 데이터베이스의 모양이 쿼리 대상과 일치하도록 데이터를 구성합니다. 이는 속도와 확장성 향상에 중요한 요소입니다.
-
데이터 속도: DynamoDB는 프로세스 쿼리에 사용할 수 있는 물리적 파티션의 수를 늘리고, 해당 파티션에 효율적으로 데이터를 배포해 조정합니다. 사전에 피크 쿼리 로드를 알면 I/O 용량을 가장 효과적으로 사용할 수 있는 데이터 파티션(분할) 방법을 결정하는 데 도움이 될 수 있습니다.
특정 쿼리 요구 사항을 파악한 후, 성능을 결정하는 일반 원칙에 따라 데이터를 구성할 수 있습니다.
-
관련 데이터를 함께 유지합니다. 20년 전의 라우팅 테이블 최적화 연구에 따르면, 응답 시간 향상에 가장 중요한 한 가지 요소는 관련 데이터를 한 장소에 유지하는 "Locality of reference"입니다. 이는 현재 NoSQL 시스템에도 정확히 적용됩니다. 관련 데이터를 가까이 유지하는 것이 비용과 성능에 큰 영향을 미치기 때문입니다. 관련 데이터 항목을 여러 테이블로 분산시키는 대신 NoSQL 시스템에 가능한 가깝게 관련 항목을 유지해야 합니다.
대체로 DynamoDB 애플리케이션에서는 가능한 적은 수의 테이블을 유지해야 합니다.
단, 볼륨이 많은 시계열 데이터가 관여된 경우나 액세스 패턴이 아주 다른 데이터 세트는 해당되지 않습니다. 통상 반전된 인덱스의 단일 테이블로 간단한 쿼리를 활성화시켜 사용자의 애플리케이션에 필요한 복잡한 계층적 데이터 구조를 생성 및 검색할 수 있습니다.
-
정렬 순서를 사용합니다. 핵심 설계가 함께 정렬할 것을 요구하는 경우, 관련 항목을 그룹으로 묶어 효율적으로 쿼리할 수 있습니다. 이는 중요한 NoSQL 설계 전략입니다.
-
쿼리를 분산합니다. 많은 볼륨의 쿼리를 데이터베이스의 특정 부분에 집중시키지 않는 것이 중요합니다. I/O 용량을 초과할 수 있기 때문입니다. 대신 트래픽을 가능한 여러 파티션으로 분산시켜 '핫 스팟'이 방지되도록 데이터 키를 설계해야 합니다.
-
글로벌 보조 인덱스를 사용합니다. 특정 글로벌 보조 인덱스를 생성해 기본 테이블이 지원할 수 있는 것보다 다양한 쿼리를 더 빨리 저렴한 비용으로 활성화시킬 수 있습니다.
이런 일반 원칙은 DynamoDB에서 데이터를 효율적으로 모델링하기 위해 사용할 수 있는 범용 설계 패턴 가운데 일부로 전환됩니다.
DynamoDB용 NoSQL Workbench
DynamoDB용 NoSQL Workbench는 최신 데이터베이스 개발 및 작업에 사용할 수 있는 크로스 플랫폼, 클라이언트 측 GUI 애플리케이션입니다. Windows, macOS 및 Linux에서 사용할 수 있습니다. NoSQL Workbench는 DynamoDB 테이블 설계, 생성, 쿼리 및 관리에 도움이 되는 데이터 모델링, 데이터 시각화, 샘플 데이터 생성 및 쿼리 개발 기능을 제공하는 시각적 개발 도구입니다. DynamoDB용 NoSQL Workbench를 사용하여 새로운 데이터 모델을 구축하거나 애플리케이션 데이터 액세스 패턴을 충족하는 기존 데이터 모델을 기반으로 모델을 설계할 수 있습니다. 그리고 프로세스를 종료할 때 설계된 데이터 모델을 가져오고 내보낼 수도 있습니다. 자세한 내용은 NoSQL Workbench로 데이터 모델 빌드 단원을 참조하세요.