我在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
}
updated_on_minute字段的辅助索引。据我所知,二级索引不建议用于高基数情况(这是我的情况,因为我可能在同一分钟标记处有大量数据)。此外,我有经常更新的数据,这意味着updated_on_minute将继续加速。
MaterializedView,其中updated_on_minute作为分区键,id作为聚类键。我在cassandra的3.9版本上刚刚开始使用这些,但是我发现这些发行说明为3.11x(https://github.com/apache/cassandra/blob/cassandra-3.11/NEWS.txt),它们宣称它们纯粹是实验性的,并不适用于生产集群。
那么我的选择是什么?我是否只需要维护自己的表来跟踪时间上的数据?会喜欢这方面的一些意见。
提前致谢。
答案 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)以进一步减小分区大小。