需求:有100块电表,每个电表上电能数据是每分钟写入一次到数据库表中,瞬时功率是每3秒写入一次到数据库,以及每个设备的每小时数据,每天数据,都会写到数据库中.
程序主要是查询数据显示到 曲线图上,(同一设备不同时间段的数据比较、不同设备同一时间段数据比较及其他比较)
我个人数据库设计想法:
方案1:将100块电表的 每秒、分钟、小时、天的数据分别写入到表DevSecond、DevMinutes、DevHour、DevDay中,里面的字段大致包括:ID、Data(数据)、设备ID、设备分类ID、时间(是否有必要把年月日时分秒分为6个字段,因为要需要每分钟数据对比,每小时数据对比等)等;
方案2:为每一块电表弄一个表,分别存储 每秒、分钟、小时、天的数据 这样得有400多个表
时间长了之后数据量会很大,该采用什么样的方式去建表,哪种比较的合理?以及索引该如何建立才算合理?
或者各位大虾帮助给点更好的方案!谢谢!
大数据 SQL 数据库设计 性能优化
------解决方案--------------------
方案1可以。考虑数据的水平和横向切割。
------解决方案--------------------
方案1好点,方案2像你说的有400多个表,要写查询估计也是非常麻烦的。
方案1可以根据时间字段,来建分区表,足以应对数据量大的情况,另外,等你数据多了,就得考虑历史数据迁移的问题,而采用分区表,可以很方便的进行处理的。
------解决方案--------------------
3秒一条,100个电表每秒三十多条记录,算不上大数据
分区重点在于管理上的灵活性(历史数据归档)
正确设计一下,没什么挑战
若有预算,欢迎联系偶合作
------解决方案--------------------
实际设计,6个表,
一个表保存最原始的数据,包括Year,Month,Day,Hour,Minute,Second,字段,
每天定时的把数据进行汇总到,Year,Month,Day,Hour,Minute,表,这样查询的时候除非比较秒级数据,否则都可以只用去读对应的表,数据量会降低很多。甚至连分区都省了。
------解决方案--------------------
原始数据表数据量变大,汇总起来也影响速度了吧
------解决方案--------------------
你这个问题是减少即时汇总查询,把大多数的即时汇总查询变成直接查询。这样就可以省略查询计算了。