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

时间:2018-02-20 00:56:16

标签: cassandra cassandra-3.0

我在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,其中up​​dated_on_minute作为分区键,id作为聚类键。我在cassandra的3.9版本上刚刚开始使用这些,但是我发现这些发行说明为3.11x(https://github.com/apache/cassandra/blob/cassandra-3.11/NEWS.txt),它们宣称它们纯粹是实验性的,并不适用于生产集群。

  3. 那么我的选择是什么?我是否只需要维护自己的表来跟踪时间上的数据?会喜欢这方面的一些意见。

    提前致谢。

1 个答案:

答案 0 :(得分:3)

与往常一样,创建附加表以通过不同的分区键进行查询。

在您的情况下,表格将是

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

写入两个表mytable_by_timetamp和mytable_by_id。根据分区键“updated_on”或“id。”使用相应的表来读取。

基于它正在尝试解决的用例(查询)来复制数据是绝对正确的。

<强>编辑:

如果担心巨大的分区,您可以随时进入较小的分区。例如,上表可以分解为

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

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