【发布时间】:2020-05-02 05:01:11
【问题描述】:
我有一个应用程序,其中包含多个表,例如 users、stories、comments,其中包含 id、rating、text、is_deleted 等字段。
有 >1.45 亿的 cmets、>700 万的故事和 >250 万的用户。
对于每个表中的每一列,我都有另一个用于存储版本的表,例如 comments rating 的表定义如下:
item_id uint64
timestamp int64
value int32
对于其他类型的列(如 bool 或 string)的历史记录也有相同的表。
现在它可以在 postgres 上运行。
我想要实现的目标:高效查询数据,按天/小时进行分布,并收集有关我的数据的其他统计信息。
问题是 postgres 真的很慢,例如按天分配 cmets 需要 >8 小时,而像 select count(*) where timestamp > x and timestamp < y 这样的查询也很慢,因为 postgres 获取所有值并且不'没有任何计数索引。
问题:对于这种时间序列数据,哪个数据库更方便?听说有influxdb,clickhouse之类的,我没有经验所以很难选择。
【问题讨论】:
-
在迁移到下一个数据库之前,你检查过你的这个查询的
explain analyze吗?对于这么大的数据量,肯定有办法加快响应时间 -
您有一个包含 150M+ 行的数据库和一个使用该数据库的应用程序。唯一合理的数据库是已经存在的数据库。不要因为您编写了错误的查询或索引不足而尝试更改数据库。使用“将 DBMS 更改为慢速查询方法,您将永远不会做任何事情,只能从一个 DBMS 迁移到另一个。
-
@Belayer,如果为某些操作选择了错误的数据库,那么坚持使用该数据库并不是一个好主意。也许我不需要迁移,而 postgres 非常适合这类任务,这也是问题的一部分:)
标签: database postgresql architecture