多产品大量价格历史数据存储选型:关系型数据库还是InfluxDB?
关系型数据库是否适用
先说结论:你的场景下用关系型数据库完全可行,完全能覆盖数月数百万数据点的使用需求,前提是做好表结构和索引优化。
可以按你的思路做两张表设计,注意几个优化点即可:
- 产品基础信息表用
product_id作为主键,存储名称、分类、规格这类不常变更的静态属性 - 价格历史表除了价格、记录时间字段外,把
product_id作为外键关联产品表,同时创建(product_id, record_time)联合索引,你最常用的「查指定产品某段时间价格走势」的请求可以直接命中索引,哪怕数千万条数据下查询延迟也能控制在毫秒级 - 后续数据量进一步上涨后,可以按时间维度对价格历史表做分区,冷数据归档也很方便
如果你的现有技术栈本身就在用关系型数据库,这个方案的学习、维护成本极低,而且关系型数据库的事务一致性、关联查询灵活性优势很明显,需要联查产品属性和对应价格数据时直接写JOIN语句即可,比时序数据库方便很多。
是否需要选用InfluxDB这类时序数据库
是否要换时序库完全看你的后续业务需求,你当前数百万的量级完全没必要急着换,可以参考以下判断标准:
推荐换时序库的场景
- 你有大量的时序聚合类查询需求,比如批量计算全量产品近7天的价格波动率、按小时/天维度聚合所有品类的均价,这类场景下InfluxDB的查询性能会比优化到位的关系型数据库高3~10倍
- 后续数据采样频率会大幅提升,比如从每天20条涨到每小时数条,年数据量突破10亿级,时序库的高压缩比能大幅降低存储成本
- 你的查询需求基本不需要关联产品静态属性,只需要按时间、产品ID查价格或做聚合
不推荐换时序库的场景
- 当前业务没有遇到明确的查询性能瓶颈,引入新技术栈会额外增加学习和维护成本
- 查询需求里经常需要关联产品的分类、供应商等静态属性,时序库的关联查询能力非常弱,开发效率远低于关系型数据库
最终建议
如果没有特殊的高频时序聚合需求,优先用现有关系型数据库方案即可,等后续数据量破亿、时序类查询占比超过80%时再考虑迁移也完全来得及。
内容的提问来源于stack exchange,提问作者lightyears99
相关产品推荐
相关产品推荐

