【问题标题】:Which database should I use for this kind of time-series data?对于这种时间序列数据,我应该使用哪个数据库?
【发布时间】:2020-05-02 05:01:11
【问题描述】:

我有一个应用程序,其中包含多个表,例如 usersstoriescomments,其中包含 idratingtextis_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


【解决方案1】:

您所描述的听起来像是一个数据仓库。这样的数据仓库需要在任何数据库系统中仔细建模才能高效工作。

通常,您必须使用物化视图或触发器预先聚合数据,例如每天。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-23
    • 2020-09-18
    • 2012-11-07
    • 1970-01-01
    • 1970-01-01
    • 2013-07-14
    相关资源
    最近更新 更多