2012-07-30 9 views
1

그래서 행 키에 대해 복합 ID를 사용하는 열 패밀리를 정의했습니다. 복합 키는 CompositeType(LongType,LongType)입니다. 그래서이 유형의 항목을 저장했는데 제대로 작동하고 전체 키를 알고있을 때 SELECT이 예상대로 작동합니다. 하지만 첫 번째 요소로 0을, 두 번째 요소로 모든 키를 원한다고 가정 해 보겠습니다. 지금까지이 쿼리를 수행 할 수있는 유일한 방법은 다음과 같습니다.cassandra에서 compositetype 키를 선택하십시오.

모든 키가 0 인 경우 * : 다음 순서 보존이있는 한 작동하는 key >= 0:0 AND key < 1:0에 대한 CQL 쿼리를 수행합니다. 파 테이너.

내 질문은 :

1) 내가 옆 중고품에서 nodejs)

2) 만 옵션 A CQL 드라이버를 (사용하고 때문이 이상한 구문은 이러한 유형의 어떤 비 효율성이 질문? 본질적으로 나는 CQL에서 지원되지 않기 때문에 수퍼 컬럼 대신 복합 키를 사용합니다. 이런 문제를 사용하는 데 제한이없는 한이 논리를 코드에서 다루는 데 아무런 문제가 없습니다.

답변

1

데이터 모델을 변경하는 것이 좋습니다. RandomPartitioner를 사용하고 첫 번째 구성 요소를 행 키로 사용하십시오. 두 번째 구성 요소를 열 이름으로 밀어 넣으십시오. 즉, 열 이름을 대신 만들어야합니다.

열 이름은 항상 정렬되므로 쉽게 조각 작업을 수행 할 수 있습니다. 예 :

a) 두 구성 요소를 모두 알았 으면 행 키 (첫 번째 구성 요소)와 첫 번째 구성 요소에서 조각을 가져옵니다. 여러 기본 키가있는 테이블을 작성하도록 요청할 때

B) 당신은 단지 첫 번째 구성 요소를 알게되면, 행 키 (첫 번째 구성 요소)

이 접근 CQL3이의 전체 행을 가져 오기는합니다.

+0

행 키를 사용하지 않는 이유가 있지만 컴포지션으로 행 키 대신 열을 사용할 수 있다는 것이 맞습니까? 데이터가 균등하게 분산되어 있어도 불균형으로 인한 부하 문제가 발생할 수 있음을 알고 있습니다. 하지만 내 모든 키는 적어도 8 바이트의 sha1로 시작하므로 문제가 될 수 있습니다. – user1084563

+0

이제는 추론을 기억합니다. 그래서 LongType으로 키를 처리 할 수 ​​있고 현재 열은 CompositeType (LongType, UTF8Type)이 될 수 있습니다. 그러나 모두 같지 않은 경우 값 유형을 선언 할 수있는 능력을 잃지 않습니까? 한 열이 긴 값이고 다른 열이 utf8 값인 것처럼 이제는 더 이상 정적 열 이름이 없으므로 모든 열이 BytesType이라고 말해야합니다. 그런 다음 카사 드라의 기능을 잃어 버렸고 저의 타입 변환을 올바르게 처리 했습니까? 내가 여기서 뭔가를 놓치고 있니? – user1084563

+0

나의 이해에 따르면, 당신이 말한 것처럼 Byte로 저장하는 두 가지 옵션과, 값을 저장하기 위해 Dynamic Composites를 사용하는 두 가지 옵션이 있습니다. DC를 사용하면 데이터 유형이 다른 단일 구성 요소를 사용할 수 있습니다. – Mohit

0

최상의 옵션은 CQL 3입니다. 이렇게하면 아래에있는 컴포지션을 사용하여 조회를 최적화하는 동시에 복합 값의 일부를 별도의 열처럼 사용할 수 있습니다. 현재 행 키에 복합 요소를 사용하고 있으며 CQL 3은 열 이름 (so far)의 복합 요소 만 지원하지만 그 값은 일 것입니다.입니다. 이와 같이 많은 경우 행 키에서 열 이름으로 합성을 이동해도 성능이나 데이터 분포에 나쁜 영향을 미치지는 않으나 행 키가 충분히 선택 적이 지 않으면 그럴 수 있습니다.

그러나 어떤 방법 으로든 CQL 3을 조사해야합니다. CQL 2는 더 이상 사용되지 않습니다. 나는 당신의 상황에 대해 더 많이 알고 있다면 CQL 3에 대한 모델을 적용하는 방법에 대해 더 자세히 말할 수 있습니다.