我目前正在使用ClickHouse每周存储数十亿的数据。我们使用聚合表来获取数据,到目前为止还不错。现在需要从这个数据库中提取一行。
ClickHouse并不适合这种情况,尽管在应用了ClickHouse推荐的一些优化后,单行选择仍然很慢(几秒钟(。
为了进一步说明这一点,该表按列a、b、c和d进行索引,并按月进行分区(该表还有一些列(。新服务必须查询该表,而只知道A、b和z(UUID列(。然而,对于100亿个数据,平均响应时间在3到10秒之间。
我有机会添加一个额外的数据存储层,这样我就可以将数据存储到额外的数据库中以满足这一需求。
现在的实际问题是:对于这样一种我们只需要读取数十亿数据的情况,什么是最好的数据库?
p.S:
- 由于存储和网络成本的原因,我们无法使用Redis
- 我们无法向select查询添加更多列来优化查询
卡桑德拉?
您可以使用额外的表和物化视图来模拟反向索引。
这个附加表应该按z排序,并包含主表中的pk列(a、b、c、d(。
然后像一样查询主表
select ... from main_table where (a,b,c,d) in
( select a,b,c,d from additional_table where z= ... )
and z = ...
additional_table可以由main_table中的物化视图自动填充。