如果不是 MaterializedViews 而不是二级索引,那么在 cassandra 中查询数据的推荐方法是什么

If not MaterializedViews and not secondary indices then what else is the recommended way to query data in cassandra

我在 Cassandra 中有一些数据。说

create table MyTable {
    id text PRIMARY KEY,
    data text,
    updated_on timestamp
}

我的应用程序除了通过主键 id 查询此数据外,还需要通过 updated_on 时间戳来查询它。为了按时间用例完成查询,我尝试了以下方法。

create table MyTable {
    id text PRIMARY KEY,
    data text,
    updated_on timestamp,
    updated_on_minute timestamp
}
  1. updated_on_minute 字段的二级索引。据我了解,不建议在高基数情况下使用二级索引(这是我的情况,因为我可能在同一分钟内有很多数据)。此外,我有经常更新的数据,这意味着 updated_on_minute 将继续加速。

  2. MaterializedView,updated_on_minute 作为分区键,id 作为集群键。我使用的是 cassandra 的 3.9 版,并且刚刚开始使用这些,但遗憾的是,我发现了这些 3.11x (https://github.com/apache/cassandra/blob/cassandra-3.11/NEWS.txt) 的发行说明,其中声明它们纯粹是实验性的,不适用于生产集群。

那么我有什么选择呢?我是否只需要维护自己的表来跟踪按时间出现的数据?希望对此有一些意见。

提前致谢。

一如既往,创建额外的 table 以通过不同的分区键进行查询。

在你的情况下 table 将是

create table MyTable_by_timestamp {
    id text,
    data text,
    updated_on timestamp,
    Primary key(updated_on, id)
}

同时写入 tables mytable_by_timetamp 和 mytable_by_id。根据分区键 updated_on 或 id.

使用相应的 table 进行读取

根据它尝试解决的用例(查询)复制数据绝对没问题。

已编辑:

如果担心分区太大,可以随时分桶到更小的分区中。例如上面的 table 可以分解为

create table MyTable_by_timestamp {
    id text,
    data text,
    updated_on timestamp,
    updated_min timestamp,
    Primary key(updated_min, id)
}

这里我选择了每分钟作为桶的大小。根据您收到的更新数量,您可以将其更改为秒 (updated_sec) 以进一步减小分区大小。