쓰기 샤딩을 사용해 DynamoDB 테이블에 워크로드를 고르게 배포
Amazon DynamoDB의 파티션 키 공간에 더 효과적으로 쓰기 작업을 배포하는 방법 중 하나는 공간 확장입니다. 여러 방법을 사용할 수 있습니다. 파티션 키 값에 난수를 추가하여 여러 파티션으로 항목을 배포할 수 있습니다. 또는 쿼리하는 항목을 기반으로 계산된 숫자를 사용할 수 있습니다.
임의의 접미사를 사용하는 샤딩
여러 파티션 키 공간에 로드를 더 골고루 배포할 수 있는 전략 중 하나는 파티션 키 값 끝에 난수(임의의 수)를 추가하는 것입니다. 그러면 더 큰 공간으로 쓰기를 무작위화 할 수 있습니다.
예를 들어, 오늘 날짜를 나타내는 파티션 키의 경우, 1
부터 200
사이의 난수를 선택하고, 날짜의 접미사로 연결시킬 수 있습니다. 이는 2014-07-09.1
, 2014-07-09.2
에서 2014-07-09.200
까지의 파티션 키 값을 생성합니다. 파티션 키를 임의 지정했기 때문에, 각 날짜의 테이블에 대한 쓰기가 모든 파티션 키 값에 고르게 분산됩니다. 이는 병렬 처리를 개선하고 전반적인 처리량을 높입니다.
하지만 지정된 날짜의 모든 항목을 읽으려면, 모든 접미사의 항목을 쿼리해 결과를 병합해야 합니다. 예를 들어 먼저 파티션 키 값 2014-07-09.1
에 대한 Query
요청을 생성합니다. 그런 다음 2014-07-09.2
에서 2014-07-09.200
까지에 대해 또 다른 Query
요청을 생성합니다. 마지막으로 애플리케이션은 모든 Query
요청 결과를 병합해야 합니다.
계산한 접미사를 사용하는 샤딩
임의 지정 전략으로 쓰기 처리량을 크게 향상시킬 수 있습니다. 그러나 특정 항목을 쓸 때 어떤 접미사 값이 사용되었는지 모르기 때문에 해당 항목을 읽기 어렵습니다. 개별 항목을 더 쉽게 읽을 수 있도록 만들려면 다른 전략을 사용합니다. 난수(임의의 수)를 사용해 여러 파티션으로 항목을 배포하는 대신, 쿼리하고 싶은 내용을 토대로 계산할 수 있는 수를 사용합니다.
테이블의 파티션 키에 오늘 날짜를 사용한 앞의 예를 가정하겠습니다. 이제 각 항목에 액세스가 가능한 OrderId
속성이 있고, 날짜에 더해 주문 ID로 항목을 찾아야 하는 경우가 많다고 가정하겠습니다. 애플리케이션이 테이블에 항목을 쓰기 전에 주문 ID를 기준으로 해시 접미사를 계산하고 파티션 키 날짜에 추가할 수 있습니다. 계산 결과 임의 지정 전략에서 생산되는 결과와 유사하게 골고루 배포된 1-200 사이의 숫자가 생성될 것입니다.
주문 ID의 문자에 대한 UTF-8 코드 포인트 값의 제품이나 모듈로 200 + 1과 같이 간단한 계산으로 충분합니다. 파티션 키 값은 계산 결과와 연결된 날짜가 됩니다.
이러한 전략을 통해 쓰기가 파티션-키 값 및 물리적 파티션에 고르게 분산됩니다. 특정 항목과 날짜에서 GetItem
작업을 손쉽게 수행할 수 있습니다. 특정 OrderId
값에 대한 파티션-키 값을 계산할 수 있기 때문입니다.
지정된 날의 모든 항목을 읽으려면 각 2014-07-09.N
(여기서 N
은 1~200) 키를 Query
해야 하며, 애플리케이션은 모든 결과를 병합해야 합니다. 장점은 모든 워크로드를 취하는 하나의 '핫' 파티션 키 값이 발생하지 않도록 만든다는 것입니다.
참고
볼륨이 많은 시계열 데이터를 더 효율적으로 처리할 수 있는 전략에 대한 자세한 내용은 시계열 데이터 단원을 참조하십시오.