쓰기 샤딩을 사용하여 Amazon 키스페이스에 워크로드를 균등하게 배포 - Amazon Keyspaces(Apache Cassandra용)

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

쓰기 샤딩을 사용하여 Amazon 키스페이스에 워크로드를 균등하게 배포

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)));

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

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

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

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

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

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

이러한 전략을 통해 쓰기가 파티션-키 값 및 물리적 파티션에 고르게 분산됩니다. 작업을 쉽게 수행할 수 있습니다.SELECT특정 행과 날짜의 문 (특정 행) 의 파티션 키 값을 계산할 수 있기 때문입니다.titleUSD 상당.

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