想请教大家一个 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 内。
我能想到的一些做法:
- 通过
group_id分成多个 server。 - 按照
timestamp(以天为单位),group_id分表。这样可以按天 drop table 来删除过期数据。 - 为
(group_id, sub_group_id, timestamp)创建 index。
问题:
-
使用分表会降低 performance 吗?(从我的 test 结果看好像是的。)
-
MySQL or PostgreSQL?
PostgreSQL 的好处是:
- 可以使用 insert trigger 自动创建分区。
- 支持 uuid
MySQL 好处:
- 从网上来看,分表下的 performance 似乎要比 PostgreSQL 好一些。
问题很多,先感谢大家的宝贵时间!