我在Cassandra有这样一个模式:
create table if not exists
converstation_events(
timestamp timestamp,
sender_id bigint,
conversation_id bigint,
message_type varchar,
message text,
primary key ((conversation_id), sender_id, message_type, timestamp));
有一个消息类型的值是conversation结束的,有没有方法去规范化数据,这样我就可以对那些已经结束的对话进行查询?
我曾考虑过,当会话结束消息到达系统时,可以通过触发器更新一个额外的字段,这有意义吗?
1条答案
按热度按时间35g0bw711#
在cassandra中,您需要以一种能够回答您的问题的方式对数据进行建模。它不像rdbms那样先创建模型,然后再创建查询。所以,回头想想。。。
当您在cassandra中进行查询时(大多数情况下…),您需要按主键进行查询,并且可以使用集群键进行筛选或选择范围。一个很棒的帖子。
你的
converstation_events
表将按发件人、类型和时间筛选对话的答案。**如果要按时间筛选,则必须包括sender_id
以及message_type
在查询中。但是您需要给定类型的所有会话,因此需要另一个表来回答此查询。如果你想要所有的谈话
conversation_ended
您可以创建第二个表来将消息类型Map到会话,例如-在客户端,您必须向
conversation_by_message_type
任何时候只要你插入一个对话事件与给定的message_type
你可能想看看。我有timestamp
以便您可以按时间或时间进行排序或筛选time
以及conversation_id
.要查找所有结束的对话,可以执行以下查询