Пару вещей. Прежде всего, когда я создать схему, вставить строку, я получаю другое сообщение об ошибке, чем вы:
[email protected]:stackoverflow2> CREATE TABLE events (
... timekey text,
... id timeuuid,
... event_types list<text>,
... PRIMARY KEY ((timekey), id)
...);
[email protected]:stackoverflow2> INSERT INTO events (timekey, id, event_types)
VALUES ('1', now(),['foo','bar']);
[email protected]:stackoverflow2> select count(1) from events where event_types contains 'foo';
InvalidRequest: code=2200 [Invalid query] message="No secondary indexes on the restricted
columns support the provided operators: "
Чтобы получить эту работу, вам нужно будет создать вторичный индекс на вашем event_types
коллекции. Конечно, вторичные индексы по коллекциям - new feature as of Cassandra 2.1. В силу того, что ваше сообщение об ошибке отличается, я собираюсь предположить, что вам нужно будет перейти на 2.1.
Я использую 2.1.5 в моей песочнице прямо сейчас, поэтому, когда я создать индекс на event_types
это работает:
[email protected]:stackoverflow2> CREATE INDEX eventTypeIdx ON events(event_types);
[email protected]:stackoverflow2> select count(1) from events where event_types contains 'foo';
count
-------
1
(1 rows)
Даже если это может работать, вторичные индексы на больших столах или в больших кластерах как известно, не работают хорошо. Я ожидал бы, что вторичные индексы по коллекциям будут работать еще хуже, поэтому просто возьмите это как предупреждение.
Также возможно запросить несколько событий-событий в одном запросе?
Есть способы сделать это, но я рекомендую против него для вышеупомянутых проблем с производительностью. Я ответил на аналогичный вопрос здесь, если вы заинтересованы: Cassandra CQL where clause with multiple collection values?
Спасибо @Bryce. Хорошо знать, что это было из-за версии. Кажется, мы недавно понизились с 2,1 до 2,0, так как в тот момент это был самый стабильный выпуск. Угадайте время для обновления. Кроме того, в отношении проблемы с производительностью мой фактический запрос также включает в себя основной/раздел ключа в предложении where. Так что может быть немного лучше –
я бы запросить его, как это «выбрать * от событий где event_types содержит„Foo“ и идентификатор> 04e2c71a-2ae9-11e5-a468-6318a3eb3a8a и timekey в („201506171850“)» –
@Saddy Хорошая идея о включении ключа раздела. Это определенно поможет. – Aaron