cassandra主键在哪里导致限制
我想使用cassandra作为数据库来存储消息,在我的模型中,消息是按通道聚合的。 信息的3个主要重要领域:cassandra主键在哪里导致限制,cassandra,primary-key,clustering-key,Cassandra,Primary Key,Clustering Key,我想使用cassandra作为数据库来存储消息,在我的模型中,消息是按通道聚合的。 信息的3个主要重要领域: 通道id 创建于 消息id(唯一) 主要的读取/获取API是按通道获取消息,按创建的排序。 另外,我还通过channel\u id+message\u id更新了一个小范围的消息 所以我的问题是关于主键的定义。 如果我将定义它(频道id,创建人) 我是否能够使用WHERE子句,如channel_id=X和message_id=XX,进行更新,即使message_id不在主键中(我确实给查
排序。
另外,我还通过channel\u id
+message\u id
更新了一个小范围的消息
所以我的问题是关于主键的定义。
如果我将定义它(频道id,创建人)
我是否能够使用WHERE
子句,如channel_id=X和message_id=XX
,进行更新
,即使message_id
不在主键中(我确实给查询分配了分区键)
如果没有,
如果我将像这样定义主键(频道id、创建人、消息id)
我是否能够仅使用1个群集列(频道id,创建人)
并使用where causechannel\u id
+message\u id
进行更新
谢谢
定义它(频道id,创建人)
我是否能够使用WHERE
子句(如频道id=X
和消息id=XX
不需要。Cassandra中的写入操作需要所有主键组件。首先,您必须提供由创建的<代码>消息_id
不是密钥的一部分,因此必须将其删除
如果没有,如果我将像这样定义主键(channel\u id,created\u by,message\u id)
,我是否能够使用执行读取操作,其中原因只有一个集群列(channel\u id,created\u by)
是的,这将起作用:
SELECT * FROM messages WHERE channel_id='1' AND created_by='Aaron';
这^有效,因为您已经提供了前两个主键组件,而没有跳过任何组件。Cassandra可以很容易地找到包含频道id的分区的节点,并向下扫描到由创建的开始的行
并使用WHERE causechannel\u id
+message\u id
进行更新
否。同样,您需要提供由
创建的,以便写入成功。主键选择决策是Cassandra数据建模中最重要的部分之一。你需要了解这张桌子。我不确定我是否能帮助您提供上述信息。但我还是会尝试一下
您的要求:
按创建的排序依据
使用通道id+消息id进行更新
尝试将channel_id+message_id作为分区键,并将创建的作为集群键。主键中的消息id也有助于确保唯一性
最近我在上找到了DS220数据建模课程。这太棒了