cassandra получает все записи во временном диапазоне

Мне нужно работать с семейством столбцов, которое имеет (user_id, timestamp) в качестве ключа. В моем запросе я хотел бы получить все записи за определенный временной интервал, не зависящий от user_id. Это точная схема таблицы:

CREATE TABLE userlog ( user_id text, ts timestamp, action text, app_type text, channel_name text, channel_session_id text, pid text, region_id text, PRIMARY KEY (user_id, ts) ) 

Я попытался запустить

 SELECT * FROM userlog WHERE ts >= '2013-01-01 00:00:00+0200' AND ts <= '2013-08-13 23:59:00+0200' ALLOW FILTERING; 

который отлично работает на моей локальной установке cassandra, содержащей небольшой dataset, но с

 Request did not complete within rpc_timeout. 

на продуктивной системе, содержащей все данные.

Есть ли запрос, предпочтительно cql, который работает плавно с данным семейством столбцов или мы должны изменить дизайн?

    Тайм-аут состоит в том, что Cassandra занимает больше времени ожидания (по умолчанию 10 секунд), чтобы вернуть данные. По вашему запросу Cassandra попытается извлечь весь dataset перед возвратом. Для более чем нескольких записей это может занять больше времени, чем таймаут.

    Для запросов, которые производят множество данных, вам нужно указать страницу

     SELECT * FROM userlog WHERE ts >= '2013-01-01 00:00:00+0200' AND ts <= '2013-08-13 23:59:00+0200' AND token(user_id) > previous_token LIMIT 100 ALLOW FILTERING; 

    где user_id – предыдущий user_id. Вам также понадобится страница на ts, чтобы гарантировать, что вы получите все записи для последнего user_id.

    В качестве альтернативы, в Cassandra 2.0.0 (только что выпущен) пейджинг выполняется прозрачно, поэтому ваш исходный запрос должен работать без тайм-аута или ручного поискового вызова.

    ALLOW FILTERING означает, что Cassandra считывает все ваши данные, но только возвращает данные в указанном диапазоне. Это эффективно только в том случае, если диапазон – это большая часть данных. Если вы хотите найти записи, например, через 5-минутное окно, это будет очень неэффективно.

    Кажется, что горячая точка для возможности запроса по времени (или любому диапазону) заключается в том, чтобы указать какой-то «другой столбец» в качестве ключа раздела, а затем указать метку времени как «столбец кластеризации»,

     CREATE TABLE postsbyuser ( userid bigint, posttime timestamp, postid uuid, postcontent text, PRIMARY KEY ((userid), posttime) ) WITH CLUSTERING ORDER BY (posttime DESC); 

    вставлять поддельные данные

      insert into postsbyuser (userid, posttime) values (77, '2013-04-03 07:04:00'); 

    и запрос (важная часть заключается в том, что это «быстрый» запрос и ALLOW FILTERING не требуется, как это должно быть):

      SELECT * FROM postsbyuser where userid=77 and posttime > '2013-04-03 07:03:00' and posttime < '2013-04-03 08:04:00'; 

    Вы также можете использовать трюки для группировки по дням (и, таким образом, иметь возможность запрашивать по дням) или нет.

    Если вы используете трюк стиля «group by day», тогда вторичный индекс также будет вариантом (хотя вторичные индексы, похоже, работают только с «EQ» = operator?).

    Interesting Posts

    получить контактную информацию от android contact picker

    Специальные пароли приложений Google и двухэтапная аутентификация

    Вкладки в браузере Chrome слишком сильно сжаты

    Tomato Dual VLAN (где один из них туннелируется VPN)

    Как реализовать службу JAX-RS RESTful в системе JSF

    Почему деление на ноль с номерами с плавающей запятой (или двойной точностью) не вызывает java.lang.ArithmeticException: / на ноль в Java

    Сценарий Bash & 'su', дающий ошибку «стандарт должен быть tty»,

    Как поставить задачу для сна (или задержки) в C # 4.0?

    Как начать восстановление из раздела восстановления на ASUS A6000?

    Заставить IE использовать один процесс за вкладку

    Загрузите файл в SharePoint через встроенные веб-службы

    Строка не была признана действительным DateTime “format dd / MM / yyyy”

    Как установить определенную версию набора модhive Perl?

    Изменение оттенка цвета RGB

    Как добавить настраиваемое местоположение в диалоговом окне «Сохранить как»?

    Давайте будем гением компьютера.