2단계: 데이터 준비 - Amazon Keyspaces(Apache Cassandra용)

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

2단계: 데이터 준비

효율적인 전송을 위해 소스 데이터를 준비하는 것은 2단계 프로세스입니다. 먼저 데이터를 무작위화합니다. 두 번째 단계에서는 데이터를 분석하여 적절한 cqlsh 파라미터 값과 필요한 테이블 설정을 결정합니다.

데이터 무작위화

cqlsh COPY FROM 명령은 CSV 파일에 나타나는 것과 동일한 순서로 데이터를 읽고 씁니다. cqlsh COPY TO 명령을 사용하여 소스 파일을 만들면 데이터가 키 정렬된 순서대로 CSV에 기록됩니다. Amazon Keyspaces는 내부적으로 파티션 키를 사용하여 데이터를 분할합니다. Amazon Keyspaces에는 동일한 파티션 키에 대한 요청을 로드 밸런싱하는 데 도움이 되는 로직이 내장되어 있지만 순서를 무작위로 지정하면 데이터를 로드하는 것이 더 빠르고 효율적입니다. Amazon Keyspaces가 다른 파티션에 쓸 때 발생하는 내장된 로드 밸런싱을 활용할 수 있기 때문입니다.

쓰기를 파티션 전체에 균등하게 분산하려면 소스 파일의 데이터를 무작위화해야 합니다. 이 작업을 수행하는 애플리케이션을 작성하거나 Shuf와 같은 오픈 소스 도구를 사용할 수 있습니다. Shuf는 Linux 배포판, macOS(homebrew에 coreutils 설치), Windows(Windows Subsystem for Linux(WSL) 사용)에서 무료로 사용할 수 있습니다. 이 단계에서 열 이름이 있는 헤더 행이 섞이지 않도록 하려면 한 가지 추가 단계가 필요합니다.

헤더를 보존하면서 소스 파일을 무작위화하려면 다음 코드를 입력합니다.

tail -n +2 keyspaces_sample_table.csv | shuf -o keyspace.table.csv && (head -1 keyspaces_sample_table.csv && cat keyspace.table.csv ) > keyspace.table.csv1 && mv keyspace.table.csv1 keyspace.table.csv

Shuf는 keyspace.table.csv라는 새 CSV 파일에 데이터를 다시 씁니다. 이제 필요 없는 keyspaces_sample_table.csv 파일을 삭제할 수 있습니다.

데이터 분석

데이터를 분석하여 평균 및 최대 행 크기를 결정합니다.

이렇게 하는 이유는 다음과 같습니다.

  • 평균 행 크기는 전송할 총 데이터 양을 추정하는 데 도움이 됩니다.

  • 데이터 업로드에 필요한 쓰기 용량을 프로비저닝하려면 평균 행 크기가 필요합니다.

  • 각 행의 크기가 Amazon Keyspaces의 최대 행 크기인 1MB 미만인지 확인할 수 있습니다.

참고

이 할당량은 파티션 크기가 아니라 행 크기를 나타냅니다. Apache Cassandra 파티션과 달리 Amazon Keyspaces 파티션은 크기가 사실상 바인딩되지 않을 수 있습니다. 파티션 키와 클러스터링 열에는 메타데이터를 위한 추가 스토리지가 필요하며 이를 행의 원시 크기에 추가해야 합니다. 자세한 설명은 Amazon Keyspaces에서의 행 크기 계산 섹션을 참조하세요.

다음 코드는 AWK를 사용하여 CSV 파일을 분석하고 평균 및 최대 행 크기를 인쇄합니다.

awk -F, 'BEGIN {samp=10000;max=-1;}{if(NR>1){len=length($0);t+=len;avg=t/NR;max=(len>max ? len : max)}}NR==samp{exit}END{printf("{lines: %d, average: %d bytes, max: %d bytes}\n",NR,avg,max);}' keyspace.table.csv

이 코드를 실행하면 다음과 같은 결과가 출력됩니다.

using 10,000 samples: {lines: 10000, avg: 123 bytes, max: 225 bytes}

이 자습서의 다음 단계에서 평균 행 크기를 사용하여 테이블의 쓰기 용량을 프로비저닝합니다.