Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cassandra更新-缺少某些群集密钥(时间戳)_Cassandra_Cql - Fatal编程技术网

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时间戳