请教亿级别的 Time Series 数据用 SQL 存储的最佳实践

2018-01-13 04:30:57 +08:00
 lzdhlsc

想请教大家一个 SQL 大表的问题。

需求为: 使用 SQL 存储大约 12 亿的 time series 数据, ttl 为 30 天。Schema 为 (group_id, sub_group_id, timestamp, value)

绝大多数查询是做一些 aggregation , 比如 sum(value) group by sub_group_id。所有查询保证都在同一 group id 内。

我能想到的一些做法:

  1. 通过 group_id 分成多个 server。
  2. 按照 timestamp (以天为单位), group_id 分表。这样可以按天 drop table 来删除过期数据。
  3. (group_id, sub_group_id, timestamp) 创建 index。

问题:

  1. 使用分表会降低 performance 吗?(从我的 test 结果看好像是的。)

  2. MySQL or PostgreSQL?

    PostgreSQL 的好处是:

    1. 可以使用 insert trigger 自动创建分区。
    2. 支持 uuid

    MySQL 好处:

    • 从网上来看,分表下的 performance 似乎要比 PostgreSQL 好一些。

问题很多,先感谢大家的宝贵时间!

1891 次点击
所在节点    问与答
13 条回复
widewing
2018-01-13 09:03:31 +08:00
为啥不用 tsdb?
gouchaoer
2018-01-13 09:22:06 +08:00
你这个每行字段很小只有几个字节,所以几亿数据也就几 g 或者几十 g 不算多,分表对查询没提高的吧,因为你查询用了索引,只是插入速度提高了。。。。总结,可以按照日期分表每张表控制在千万级别,保证插入速度,查询的时候分表查
dangyuluo
2018-01-13 09:37:34 +08:00
试试 pi 数据库吧
feverzsj
2018-01-13 13:22:03 +08:00
你才这么点数据,至于折腾成这样吗,随便什么数据库,一张表就足够了
rrfeng
2018-01-13 13:46:17 +08:00
如果要考虑以后接入更多的话,直接上 tsdb
如果以后也只有 12 亿的话,MySQL 还是什么 SQL 区别不大,针对性的做优化就好了
cevincheung
2018-01-13 14:32:30 +08:00
postgresql 站队
ziding
2018-01-13 15:12:35 +08:00
postgresql 有很多扩展,很适合,你可以看看 pipelinedb 感觉就是为了你这个场景量身定做的。mysql 数据量大了之后关联查询想死的心都有了。
dexterzzz
2018-01-13 15:48:36 +08:00
列存储数据库专门干这个用的
suixn
2018-01-13 15:56:18 +08:00
尝试下 clickhouse,实测百亿级数据,有 group by. order by. 10s 内完成
lzdhlsc
2018-01-13 19:11:49 +08:00
@widewing 团队决定了用 sql。可能是因为时间紧没时间从头开始维护新技术栈。
lzdhlsc
2018-01-13 19:14:20 +08:00
@gouchaoer 我们测试了一下大约有个几百 G 吧。我描述的可能是简化版的 schema,实际上每个 value 可能是 4 个 double 类型。
akira
2018-01-13 19:58:41 +08:00
你要给出 预期执行的时间呀。 允许跑一天的话,什么都不用处理的啦。
lzdhlsc
2018-01-14 04:08:10 +08:00
@akira 要支持 Online Service。最好平均执行时间小于 1 秒。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/422523

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX