目前我有一个简单的表如下:
CREATE TABLE datatable (timestamp bigint, value bigint, PRIMARY KEY (timestamp))
Run Code Online (Sandbox Code Playgroud)
此表仅在增长,并且从未被修改过.关键是独特的时间戳.所有查询都是以下形式的范围查询:
SELECT * from datatable WHERE timestamp > 123456 ALLOW FILTERING
Run Code Online (Sandbox Code Playgroud)
此外,查询仅请求插入一小组最新行.我现在遇到的问题是这些查询的性能与表大小负相关.随着表的增长,即使查询只返回几行,获取响应也需要更长的时间.
你能否告诉我应该如何修改表模式以避免性能下降(例如,创建索引或设置集群)?谢谢!
添加一些时间像
CREATE TABLE datatable (
bucket timestamp,
time timestamp,
value bigint,
PRIMARY KEY ((bucket), time)
) WITH CLUSTERING ORDER BY (time DESC);
Run Code Online (Sandbox Code Playgroud)
其中bucket是截断到日期或星期或月份的日期(根据大约摄取率可以计算出多少,一个体面的目标是每个分区大约64mb,但这非常灵活),这样你就可以收集一段时间内的所有行在一个分区内非常有效.
每个节点拥有数十亿个分区将导致维修和压缩速度显着降低.分区顺序也是随机的(分区键顺序的murmur3哈希),所以你不能按顺序执行上面的查询.
通过上面的内容,您可以从开始时间的桶到当前桶进行迭代ALLOW FILTERING(您不应该在玩具数量或测试环境之外的任何事情之外使用),结果将按时间戳的顺序排列.
| 归档时间: |
|
| 查看次数: |
66 次 |
| 最近记录: |