Cassandra更新-缺少某些群集密钥(时间戳)
我有一张卡桑德拉桌子,看起来像:Cassandra更新-缺少某些群集密钥(时间戳),cassandra,cql,Cassandra,Cql,我有一张卡桑德拉桌子,看起来像: CREATE TABLE messages ( user_id INT, message_id INT, received_timestamp TIMESTAMP, status TEXT, message TEXT, PRIMARY KEY ((user_id, message_id),received_timestamp)) WITH CLUSTERING ORDER BY (received_
CREATE TABLE messages (
user_id INT,
message_id INT,
received_timestamp TIMESTAMP,
status TEXT,
message TEXT,
PRIMARY KEY ((user_id, message_id),received_timestamp))
WITH CLUSTERING ORDER BY (received_timestamp DESC);
如果我尝试更新行,例如:
UPDATE messages SET status = 'success' WHERE user_id = 1 AND message_id = 1;
我得到一个错误:
Some clustering keys are missing: received_timestamp
我知道我需要包括收到的_时间戳,因为它是主键的一部分,但是我只是出于订购目的将其包括在主键中。如果我不知道收到的\u时间戳值,是否无法在此执行更新?如果没有,是否有更好的方法来创建此表,以适用于此用例?提前感谢。Cassandra不支持跨分区键排序数据,因为它在分布式环境中需要大量网络通信。但您可以在分区键内使用排序。如果要按消息时间戳获取指定用户的所有消息(或某些日期之间的消息片段),可以将timeuuid类型用于消息\u id,而不是int:
CREATE TABLE messages (
user_id int,
message_id timeuuid,
status text,
message text,
PRIMARY KEY (user_id, message_id))
WITH CLUSTERING ORDER BY (message_id DESC);
timeuuid
type允许您拥有唯一的消息id并按时间戳对消息进行排序
CQL需要与timeuuid一起工作
但您应该关心每个用户的邮件数,因为:
分区中的单元:~20亿(2^31);单列值大小:2 GB(建议使用1 MB)
Cassandra不支持跨分区键排序数据,因为它在分布式环境中需要大量的网络通信。但您可以在分区键内使用排序。如果要按消息时间戳获取指定用户的所有消息(或某些日期之间的消息片段),可以将timeuuid类型用于消息\u id,而不是int:
CREATE TABLE messages (
user_id int,
message_id timeuuid,
status text,
message text,
PRIMARY KEY (user_id, message_id))
WITH CLUSTERING ORDER BY (message_id DESC);
timeuuid
type允许您拥有唯一的消息id并按时间戳对消息进行排序
CQL需要与timeuuid一起工作
但您应该关心每个用户的邮件数,因为:
分区中的单元:~20亿(2^31);单列值大小:2 GB(建议使用1 MB)
用户id和消息id对于每条消息都是唯一的吗?@AshrafulIslam message\u id是唯一的,但是对于一个用户可能有多条消息\u id如果消息id是唯一的,那么
接收的\u timestamp
将如何根据时间戳对消息进行排序?一个用户id只有一个收到的\u时间戳
,每条消息的收到的\u时间戳
都是唯一的?@AshrafulIslam message\u id是唯一的,但一个用户可能有多条消息\u id如果消息id是唯一的,那么收到的\u时间戳
将如何根据时间戳对消息进行排序?对于用户id和消息id,将只有一个接收到的\u时间戳