2013-10-09 1 views
0

я хочу использовать ломтика запрос в Кассандре, как это:Cassandra пейджинговой и хэш числа

create table users (KEY varchar PRIMARY KEY, data varchar); 
insert into users (KEY, 'data') values ('1', 'one'); 
insert into users (KEY, 'data') values ('2', 'two'); 
insert into users (KEY, 'data') values ('3', 'three'); 
insert into users (KEY, 'data') values ('4', 'four'); 
select * from users; 
    3 | three 
    2 | two 
    1 | one 
    4 | four 
select * from users LIMIT 1; 
    3 | three 
select * from users WHERE KEY > '3' LIMIT 1; 
    2 | two 
select * from users WHERE KEY > '2' LIMIT 1; 
    1 | one 
select * from users WHERE KEY > '1' LIMIT 1; 
    4 | four 

в этом примере секционирования является ordered.but мой разметки является unordered.so я использую запрос, как это:

select * from users WHERE token(KEY) > token('3') LIMIT 3; 

Если я хочу получить доступ ко всем строкам, я должен начинать запросы с ключа с самым низким номером хэша. есть ли способ найти ключ с самым низким номером хэша? если нет, то есть лучший способ пейджинга через строку таблицы?

спасибо за вашу помощь :)

редактировать:

теперь у меня есть еще одна problem.token функция поддерживается только на перегородке key.and в моем ср первичный ключ является составным, как (слово, DocId). поэтому, например, у меня есть severel word = hi.and, когда я использую запрос как select * от пользователей WHERE token (word)> token ('hi') LIMIT 3; он начинается с последнего hi в моем cf, и таким образом некоторые строки со словом = hi были проигнорированы.

ответ

0

Ваш первый запрос может не иметь WHERE, и он вернет первые ключи, заказанные хешем. Затем вы можете использовать последний ключ, возвращенный этим в следующем запросе.

Вы также можете использовать token(''), которое приводится к самой низкой лексеме т.е.

select * from users WHERE token(KEY) > token('') LIMIT 3; 

будет возвращать первый 3 ключа заказанного маркера и эквивалентно

select * from users LIMIT 3; 

Вы также можете использовать новый автоматический пейджинг в Cassandra 2.0 (см. CASSANDRA-4415).

+0

благодарит за вашу помощь. но теперь у меня есть еще одна проблема. Функция token поддерживается только в разделе key.and в моем cf первичный ключ является составным как (word, docid) .so, например, у меня есть severel word = hi.and, когда я использую запрос, например select * from пользователи WHERE token (word)> token ('hi') LIMIT 3; он начинается с последнего hi в моем cf, и таким образом некоторые строки со словом = hi были проигнорированы. – zsh

+0

Вы можете ограничить строку, но это звучит так, как автоматический пейджинг в Cassandra 2.0 сделает все, что вам нужно. – Richard

+0

Не могли бы вы подробнее рассказать об автоматическом пейджинге в Кассандре? – zsh

Смежные вопросы