2011-09-28 3 views
3

내가 이해하는 한, 카산드라 보조 인덱스는 내부 CF로 저장됩니다. 여기서 행 키는 인덱스 내의 값이며, 열은 인덱스 된 원본 CF로 되돌아가는 행키입니다.cassandra 보조 인덱스가 RandomPartitioner에서도 어휘 행 키 순서로 결과를 반환합니까?

색인 열에 원본 CF 행 키 값을 저장할 수 있습니까? 그런 다음 인덱스 행 내의 열이 정렬되기 때문에 인덱스의 특정 값에 대한 쿼리는 이론적으로 정렬 된 값 순서로 행 키를 반환 할 수 있습니다.

내 수동 색인 CF를 수동으로 유지 관리하는 경우 (필자의 수동 색인 CF에서 해당 열을 문자열로 정렬해야합니다), 내장 색인으로 CF를 수행 할 수 있는지 궁금합니다. 보조 색인에서


희망 예를 명확히 ... I 2 열의 각 (identifierbirth_date의 인덱스되고, 쉽게 열을 구별 할 수있다) 5 개 행이,이 경우에는 UTF8 키의 각 행 (하나의 문자 문자열) : 나는 인덱스 쿼리를 할 때

[[email protected]] create column family users with comparator=UTF8Type 
...  and column_metadata= 
...  [{column_name: identifier, validation_class: LongType} 
...  ,{column_name: birth_date, validation_class: LongType, index_type: KEYS}]; 
86518c00-e9f7-11e0-0000-242d50cf1fde 
Waiting for schema agreement... 
... schemas agree across the cluster 
[[email protected]] set users['a']['identifier'] = 1; 
Value inserted. 
[[email protected]] set users['a']['birth_date'] = 1975; 
Value inserted. 
[[email protected]] set users['c']['identifier'] = 3; 
Value inserted. 
[[email protected]] set users['c']['birth_date'] = 1975; 
Value inserted. 
[[email protected]] set users['b']['identifier'] = 2; 
Value inserted. 
[[email protected]] set users['b']['birth_date'] = 1975; 
Value inserted. 
[[email protected]] set users['x']['identifier'] = 5; 
Value inserted. 
[[email protected]] set users['x']['birth_date'] = 1975; 
Value inserted. 
[[email protected]] set users['f']['identifier'] = 4; 
Value inserted. 
[[email protected]] set users['f']['birth_date'] = 1975; 
Value inserted. 

지금, 난 다시 자신의 rowkeys 'MD5 해시의 역순으로 보이는에서 사용자의 행을 얻을합니다 (identifier보고, 결과 순서는 X, B이다 , f, c, a) :

[[email protected]] get users where birth_date = 1975; 
------------------- 
RowKey: ff 
=> (column=birth_date, value=1975, timestamp=1317231030507000) 
=> (column=identifier, value=5, timestamp=1317231030504000) 
------------------- 
RowKey: 0b 
=> (column=birth_date, value=1975, timestamp=1317231030502000) 
=> (column=identifier, value=2, timestamp=1317231030500000) 
------------------- 
RowKey: 0f 
=> (column=birth_date, value=1975, timestamp=1317231031992000) 
=> (column=identifier, value=4, timestamp=1317231030509000) 
------------------- 
RowKey: 0c 
=> (column=birth_date, value=1975, timestamp=1317231030498000) 
=> (column=identifier, value=3, timestamp=1317231030494000) 
------------------- 
RowKey: 0a 
=> (column=birth_date, value=1975, timestamp=1317231030491000) 
=> (column=identifier, value=1, timestamp=1317231030476000) 

5 Rows Returned. 

내 질문에, 내부 색인 CF를 'a', 'b', 'c', 'f', 'x'를 열 이름으로 사용하여 인덱스를 만들 때 쿼리, 나는 어휘 rowkey 순서로 사용자의 행을 다시 얻을.

+0

그래서 인덱스의 각 행에 대해 column-name이 정렬에 사용되는 유용한 값이고 열 값이 인덱싱되는 CF의 행 키인 열을 저장 하시겠습니까? '유용한 가치'(열 이름)가 실제로 무엇인지 명확히 할 수 있습니까? 아마도 원래의 행이 인덱싱되었지만 그 행에는 모든 종류의 열이있을 수 있습니다. 실제 예제가 도움이 될 수도 있습니다 ... – DNA

+0

인덱스 열 이름을 원래 행 키 (md5 해시가 아님)로하고 싶습니다. 추가 된 예 - 감사합니다. – lgielgud

답변

2

이렇게 할 수없는 이유는 인덱스 순서가 분할 자 순서와 일치해야하거나, 각 쿼리에 대해 분산/수집을 수행 할 필요없이 여러 노드에서 결과 집합을 "페이지"할 수 없다는 것입니다).

맞춤 주문을 허용하기 위해 https://issues.apache.org/jira/browse/CASSANDRA-1599이 열려 있으므로 업데이트 문제를 확인해야합니다.

관련 문제