如果不是 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
}
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) 的发行说明,其中声明它们纯粹是实验性的,不适用于生产集群。
那么我有什么选择呢?我是否只需要维护自己的表来跟踪按时间出现的数据?希望对此有一些意见。
提前致谢。
一如既往,创建额外的 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) 以进一步减小分区大小。
我在 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) 的发行说明,其中声明它们纯粹是实验性的,不适用于生产集群。
那么我有什么选择呢?我是否只需要维护自己的表来跟踪按时间出现的数据?希望对此有一些意见。
提前致谢。
一如既往,创建额外的 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) 以进一步减小分区大小。