2013-06-24 3 views
1

Я хочу отойти от mysql, хранящего посетителей в приложении для социальных сетей, и подумал, что cassandra будет хорошо для этого.Как получить последние 20 уникальных вещей

Пусть followign таблицу:

CREATE TABLE visitors (
    visiteduserid bigint, 
    visitinguserid bigint, 
    visitdate timestamp, 
    PRIMARY KEY (visiteduserid,visitinguserid) 
); 

Я хочу, чтобы получить последние 20 уникальных visitinguserid для текущего visiteduserid, но

SELECT visitinguserid FROM visitors WHERE visiteduserid=1 ORDER BY visitdate DESC LIMIT 20 

Bad Request: Order by is currently only supported on the clustered columns of the PRIMARY KEY, got visitdate 

я прав, полагая, что я не могу просто добавить visitdate к основному ключу, так как я хочу только иметь последний визит для одного пользователя/пользователя. Лучше всего было бы отсортировать их по посещению спуска, как указано в презентации «Twitter Clone» ...

Любая помощь там?

+0

Patric McFadin представлен на таймсерах и моделировании данных на саммите Кассандры. Взгляните на [его слайды] (http://www.slideshare.net/planetcassandra/c-summit-2013-the-worlds-next-top-data-model-by-patrick-mcfadin), они отличные ресурс, есть пример с моделью данных пользовательской активности, которая в значительной степени зависит от того, что вы хотите. 'ALSO' Вы можете добавить' visitdate' к составному ключу, а затем отсортировать его так, как хотите. –

+0

В текущих версиях casssandra это кажется невозможным. Реализован обходной путь, и теперь он смотрит в hbase. –

ответ

2

Вы были близки. Попробуйте это и посмотреть, как это работает для вас

CREATE TABLE visitors (
    visiteduserid bigint, 
    visitdate timestamp, 
    visitinguserid bigint, 
    PRIMARY KEY (visiteduserid,visitdate) 
) WITH CLUSTERING ORDER BY (visitdate DESC); 

Тогда это сделать:

SELECT visitinguserid FROM visitors WHERE visiteduserid=1 LIMIT 20 

Это должно делать то, что вы ищете. Опираясь на использование компаратора для создания заказа, который вы хотите на вставке, намного эффективнее.

+1

Эта модель данных будет хранить каждый визит, хотя OP хочет 20 самых последних уникальных посетителей. Если посетитель посещает несколько раз, будут дубликаты. Однако вы можете использовать запрошенный вами текст и прокрутить страницу до тех пор, пока у вас не будет 20 уникальных посетителей. Это эффективно, если каждый посетитель не посещает слишком часто. – Richard