Cassandra更新查询| timestamp列作为聚类键

时间:2017-05-04 08:41:25

标签: cassandra

我在cassandra中有一个表格,其中包含以下架构:

CREATE TABLE user_album_entity (
    userId text,
    albumId text,
    updateDateTimestamp timestamp,
    albumName text,
    description text,
    PRIMARY KEY ((userId), updateDateTimestamp)
);

获取数据所需的查询将具有updateTimestamp所在的userId = xxx的顺序。因此架构有updateDateTimestamp。

更新表格列时出现问题。查询是:更新用户id = xxx的用户的相册信息。但是根据规范,对于更新查询,我需要updateDateTimestamp的确切值,在正常情况下,应用程序永远不会发送。

这些问题的答案应该是什么,因为我认为这是一个非常常见的用例,其中select查询需要按时间戳排序。非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

问题是你的表结构允许同一个专辑有多个记录,唯一的区别是时间戳(聚类键)。

三种可能的解决方案:

  1. 删除群集密钥并在应用程序级别对数据进行排序。
  2. 删除群集密钥,并在时间戳字段中添加Secondary Index
  3. 删除群集密钥并创建Materialized View以执行查询。

答案 1 :(得分:0)

如果您的用例是每个分区只包含一行, 然后你就可以为你的表建模,如:

%

以这种方式对表建模使得Update查询可以通过以下方式完成: CREATE TABLE user_album_entity ( userId text, albumId text static, updateDateTimestamp timestamp, albumName text static, description text static, PRIMARY KEY ((userId), updateDateTimestamp) );

希望这有帮助。