В Кассандре вам нужно смоделировать свои данные таким образом, чтобы они отвечали на ваши вопросы.Это не то же самое, что СУБД, в которой вы сначала создаете модель, а затем создаете свои запросы.Так что думайте задом наперед ...
Когда вы делаете запрос в Кассандре (по большей части ...), вам нужно выполнить запрос по первичному ключу, и вы можете использовать свой ключ (ы) кластеризации для фильтрации иливыберите диапазоны. отличный пост .
Ваша таблица converstation_events
даст вам ответы о разговоре, фильтрации по отправителю, типу и времени.** если вы хотите фильтровать по времени, вы должны включить в запрос sender_id
и message_type
.
Но вам нужны все разговоры определенного типа, поэтому вам потребуется другая таблица для ответа на этот запрос.Если вы хотите, чтобы все разговоры были conversation_ended
, вы можете создать вторую таблицу, чтобы сопоставить тип сообщения с беседой, например: *
conversation_by_message_type (
message_type varchar,
conversation_id bigint,
timestamp timestamp,
primary key ((message_type), timestamp, conversation_id));
. На стороне клиента вам нужно будет добавить запись в * 1016.* каждый раз, когда вы вставляете событие spoktation_events с указанным message_type
, которое вы, возможно, захотите найти.У меня есть timestamp
в этой таблице, так что вы можете отсортировать или отфильтровать по времени или time
и conversation_id
.
Чтобы найти все завершенные разговоры, вы можете выполнить такие запросы, как
<ids> = select conversation_id from conversation_by_message_type where message_type = 'conversation_ended'
select * from conversation_events where conversation_id IN (<ids>)