【问题标题】:Is there a way for Cassandra to ignore clustering key when inserting?Cassandra 有没有办法在插入时忽略集群键?
【发布时间】:2021-05-21 17:45:51
【问题描述】:

现在我有一个包含三列的表:GroupIdObjectIdData,前两列定义为分区键。

目前它可以正常工作:如果GroupIdObjectId与现有行匹配,则会被覆盖。

我正在尝试添加按日期排序,所以我添加了第三列 LastModified 并将其指定为聚类键。虽然它适用于排序,但现在我有多行共享相同的 GroupIdObjectId 对,这不是我需要的。

我怎样才能实现以前的行为?

  1. 我可以在写入之前读取表格并在写入新行之前删除匹配的行。
  2. 阅读后,我可以在我的应用程序中过滤行。

我不喜欢这两种解决方案,因为它们似乎太复杂了,而且性能是一个大问题。有没有更好的办法?

【问题讨论】:

标签: database cassandra cql


【解决方案1】:

如果其他人面临同样的问题,我是这样做的:

我有一张以GroupIdObjectId 为键的表。我不确定这是否重要,但ObjectId 被定义为集群键。

然后你从下面的视图中得到想要的结果:

        CREATE MATERIALIZED VIEW IF NOT EXISTS objectlistbylast
        AS SELECT * FROM objectlist
        WHERE groupid IS NOT NULL AND objectid IS NOT NULL AND lastmodified IS NOT NULL
        PRIMARY KEY(groupid , lastmodified, objectid )
        WITH CLUSTERING ORDER BY(lastmodified DESC);

请注意,定义主键时的顺序很重要。

【讨论】:

    猜你喜欢
    • 2017-11-07
    • 2021-11-01
    • 1970-01-01
    • 2017-12-12
    • 2020-07-02
    • 2016-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多