cassandra - 설계 - 카산드라 예제




카산드라:파티션 키 선택 (2)

작성한 문서의 색인 생성은 보조 색인을 참조합니다. 카산드라에서는 1 차 지표와 2 차 지표차이가 있습니다. 보조 인덱스의 경우 매우 고유 한 값을 갖는 것이 좋지 않지만 기본 키의 구성 요소는 어떤 구성 요소에 초점을 맞추 느냐에 달려 있습니다. 기본 키에는 다음과 같은 구성 요소가 있습니다.

PRIMARY KEY (파티션 키, 클러스터링 key_1 ... 클러스터링 key_n)

분할 키는 서로 다른 노드에 데이터를 분배하는 데 사용되며, 노드가 균형을 이루기를 원한다면 (즉, 각 노드의 잘 분산 된 데이터) 파티션 키가 가능한 한 무작위가되도록하십시오. 이것이 UUID를 사용하는 예제입니다.

클러스터링 키는 순서화에 사용되므로 특정 클러스터링 키가있는 열을 쿼리하는 것이 더 효율적일 수 있습니다. 여기서 고유 한 행이 빈번한 경우 값이 고유하지 않거나 성능이 저하되는 위치를 원합니다.

cql 문서 에는 무슨 일이 일어나고 있는지 잘 설명되어 있습니다.

매우 일반적으로 공유 된 열 값 (예 : Country )을 복합 기본 키의 파티션 키 또는 고유 한 열 값 (예 : Last_Name )으로 사용하는 것이 성능면에서 더 나은지 여부는 아직 결정되지 않았습니다.

인덱스에 대한 Cassandra 1.2의 문서를 보면 다음과 같이 나타납니다.

" 인덱스 사용시기 : 카산드라의 기본 제공 인덱스는 인덱싱 된 값이 포함 된 행이 많은 테이블에서 가장 효과적입니다. 특정 열에 고유 값이 많을수록 평균적으로 더 많은 오버 헤드가 쿼리 및 예를 들어 10 억 명의 사용자가있는 사용자 테이블이 있고 거주 한 상태로 사용자를 조회하려고한다고 가정합니다. 많은 사용자가 주에 대해 동일한 열 값을 공유합니다 (예 : CA, NY, TX 등). .) 이것은 색인을위한 좋은 후보자가 될 것이다. "

" 인덱스를 사용 하지 않을 경우 : 작은 수의 결과에 대해 대용량 레코드를 쿼리하는 데 인덱스를 사용하지 마십시오. 예를 들어 많은 고유 값이있는 열에 인덱스를 만드는 경우 해당 필드 사이의 쿼리는 10 억 명의 사용자가있는 테이블에서는 상태가 아닌 전자 메일 주소 (일반적으로 각 사용자마다 고유 한 값)로 사용자를 찾는 것이 매우 비효율적 일 수 있습니다. 카산드라 내장 인덱스를 사용하는 대신 색인의 양식으로 테이블을 수동으로 유지하는 것이 더 효율적입니다. 고유 한 데이터가 들어있는 컬럼의 경우, 조회 볼륨 인덱싱 된 열이있는 테이블에 대한 데이터는 보통이며 일정한로드가 아닙니다. "

CQL의 SELECT의 예제를 보면

" 복합 기본 키를 쿼리하고 결과를 정렬 "하면 파티션 키로 사용되는 UUID와 같은 것을 볼 수 있습니다. 이는 독창적 인 것을 사용하는 것이 더 바람직하다는 것을 나타 냅 니까?


cql3을 사용하는 경우 주어진 열 패밀리는 다음과 같습니다.

CREATE TABLE table1 (
  a1 text,
  a2 text,
  b1 text,
  b2 text,
  c1 text,
  c2 text,
  PRIMARY KEY ( (a1, a2), b1, b2) )
);

기본 키 ((a1, a2, ...), b1, b2, ...)를 정의함으로써,

이는 다음을 의미합니다.

a1, a2, ...는 행 키를 만들기 위해 사용되는 필드입니다.

  • 데이터가 어떻게 분할되는지 결정한다.
  • 한 줄에 phisically 저장된 것을 결정한다.
  • 행 키 또는 파티션 키라고하는

b1, b2, ...는 행 키를 클러스터링하는 데 사용되는 열 패밀리 필드입니다.

  • 단일 행 내에서 논리 집합 만들기
  • 범위 범위와 같은보다 유연한 검색 체계 허용
  • 열 키 또는 클러스터 키라고도 함

나머지 모든 필드는 가능한 모든 열 키 조합에 대해 효과적으로 다중화 / 복제됩니다. 다음은 파티션 키와 클러스터링 키가있는 복합 키의 예입니다.

범위 쿼리를 사용하려면 보조 인덱스를 사용하거나 (cql3부터) 해당 필드를 클러스터링 키로 선언 할 수 있습니다. 속도면에서 클러스터링 키를 사용하면 하나의 넓은 행이 만들어집니다. 다음과 같은 다중 클러스터링 키 값을 가져 오므로 속도에 영향을줍니다.

select * from accounts where Country>'Italy' and Country<'Spain'