쓰기 샤딩을 사용하여 여러 파티션에 워크로드를 균등하게 분배하십시오. - Amazon Keyspaces(Apache Cassandra용)

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

쓰기 샤딩을 사용하여 여러 파티션에 워크로드를 균등하게 분배하십시오.

Amazon Keyspaces의 파티션에 더 효과적으로 쓰기 작업을 배포하는 방법 중 하나는 공간 확장입니다. 여러 방법을 사용할 수 있습니다. 여러 파티션에 행을 분배하기 위해 난수를 쓰는 파티션 키 열을 추가할 수 있습니다. 또는 쿼리하는 항목을 기반으로 계산된 숫자를 사용할 수 있습니다.

복합 파티션 키와 무작위 값을 사용한 샤딩

파티션에 부하를 더 균등하게 분산하기 위한 한 가지 전략은 난수를 기록할 파티션 키 열을 추가하는 것입니다. 그러면 더 큰 공간으로 쓰기를 무작위화 할 수 있습니다.

예를 들어 날짜를 나타내는 단일 파티션 키가 있는 테이블은 다음과 같습니다.

CREATE TABLE IF NOT EXISTS tracker.blogs ( publish_date date, title text, description int, PRIMARY KEY (publish_date));

이 테이블을 여러 파티션에 더 균등하게 분배하려면 난수를 저장하는 파티션 키 열 shard를 추가하면 됩니다. 예:

CREATE TABLE IF NOT EXISTS tracker.blogs ( publish_date date, shard int, title text, description int, PRIMARY KEY ((publish_date, shard)));

데이터를 삽입할 때 shard 열의 1와(과) 200 사이의 난수를 선택할 수 있습니다. 이렇게 하면 (2020-07-09, 1), (2020-07-09, 2), (2020-07-09, 200)까지의 복합 파티션 키 값이 생성됩니다. 파티션 키를 임의 지정했기 때문에, 각 날짜의 테이블에 대한 쓰기가 모든 파티션 키 값에 고르게 분산됩니다. 이는 병렬 처리를 개선하고 전반적인 처리량을 높입니다.

하지만 지정된 날짜의 모든 행을 읽으려면, 모든 샤드의 행을 쿼리해 결과를 병합해야 합니다. 예를 들어 먼저 파티션 키 값 (2020-07-09, 1)에 대한 SELECT문을 생성합니다. 그런 다음 (2020-07-09, 2)에서 (2020-07-09, 200)까지에 대해 또 다른 SELECT문을 생성합니다. 마지막으로 애플리케이션은 모든 SELECT문 결과를 병합해야 합니다.

복합 파티션 키와 계산된 값을 사용한 샤딩

임의 지정 전략으로 쓰기 처리량을 크게 향상시킬 수 있습니다. 하지만 행을 작성할 때 shard 열에 어떤 값이 기록되었는지 모르기 때문에 특정 행을 읽기가 어렵습니다. 개별 행을 더 쉽게 읽을 수 있도록 만들려면 다른 전략을 사용합니다. 난수(임의의 수)를 사용해 여러 파티션으로 행을 배포하는 대신, 쿼리하고 싶은 내용을 토대로 계산할 수 있는 수를 사용합니다.

테이블의 파티션 키에 오늘 날짜를 사용한 앞의 예를 가정하겠습니다. 이제 각 행에 액세스가 가능한 title 열이 있고, 날짜에 더해 제목으로 행을 찾아야 하는 경우가 많다고 가정하겠습니다. 애플리케이션은 테이블에 행을 쓰기 전에 제목에 따라 해시 값을 계산하고 shard 열에 이를 입력할 수 있습니다. 계산 결과 임의 지정 전략에서 생산되는 결과와 유사하게 골고루 배포된 1-200 사이의 숫자가 생성될 것입니다.

제목의 문자에 대한 UTF-8 코드 포인트 값의 제품이나 모듈로 200 + 1과 같이 간단한 계산으로 충분합니다. 그러면 복합 파티션 키 값은 날짜와 계산 결과의 조합이 됩니다.

이러한 전략을 통해 쓰기가 파티션-키 값 및 물리적 파티션에 고르게 분산됩니다. 특정 행과 날짜에서 SELECT문을 손쉽게 수행할 수 있습니다. 특정 title 값에 대한 파티션-키 값을 계산할 수 있기 때문입니다.

지정된 날의 모든 열을 읽으려면 각 (2020-07-09, N)(여기서 N은 1~200) 키를 SELECT해야 하며, 애플리케이션은 모든 결과를 병합해야 합니다. 장점은 모든 워크로드를 취하는 하나의 '핫' 파티션 키 값이 발생하지 않도록 만든다는 것입니다.