数据库:MySQL 5.7
业务上有25个维度共2000多个指标数据需要存储。对于这种可变字段的指标数据,第一想法是采用纵表存储。但是具体该如何选择还是得结合业务看优缺点才行。
业务场景
数据量
1k台设备,每台设备每5分钟一次全量指标数据,存储60天
- 纵表:602460/510002000=345.6亿
- 横表:345.6亿/2000=1728万
查询场景
- 按指标维度+时间范围分页查
按同一时间上报的指标数据(时间+指标名称)
方案
纵表
从数据量来看纵表数据量非常大,需考虑分表来解决查询效率问题。
如果简单按查询数据量每表2kw来算(数据量不能简单按2kw算,需要计算字段长度,索引的页数大小),纵表需要分17280张表。按时间分页查询时,需要全表联合查询。按设备分
数据量:1k张表,每张3456万
7天分页查询:1k张表联合查询
缺点:数据量大;数据分布不均匀;分页查询慢按维度分
数据量:25张表,138240万=13.824亿
缺点:数据量大按维度+时间分
数据量:1500张表,2.304亿
7天分页查询:7张表关联查询
缺点:表数量太多;数据分布不均匀;
横表
不分表
缺点:字段列数多,MySQL是否支持呢?下面会列一下按维度分
数据量:25张表,每张表约80个字段,70万条数据
7天分页查询:不需要联表查询
缺点:数据分布不均匀;表字段多;按维度+细分维度分
细分指标只在计算时使用(同一时间上报的指标数据),分页查询时不使用
数据量:40张表,每张表约50个字段,44万条数据
7天分页查询:不需要联表查询
缺点:数据分布不均匀;字段相对减少;