日期:2014-05-17  浏览次数:20564 次

每天数据量达到1000万怎样建表
现在有一个监控系统,监控1000个以上的测点的实时数据。

可能会10秒钟一检测,也可能是5分钟一检测,这个时间由客户来定

这样全天监控,该怎样设计表结构呢?

第一种方案:测点作为列名,测点动态增加(测点是会增加或者减少的),
但是sqlserver的最多支持1024个列,oracle最多1000列,db2也不行,mysql好像
支持2000-4000?但是实在linux系统上,他们的服务器是windows2003,安装sql为sqlserver2008

结构为 jobno jctime(时间) cedian1 cedian2 ... ... 
这样的话,一天的数据量为 10*6*60*24=86,400行,也还可以,但是问题就是这个列的数量太少,测点超过1024怎么办呢?

第二种方案 表结构为 jobno cedian(测点) jctime(时间) jcvalue(值)  
这样的话 一天的数据量为 10*6*60*24*1000=86,400,000行 怎么办呢?  
这个方案是假设1000个测点,如果测点增多的话,那简直了……


------解决方案--------------------
如果每个测点 动态建表呢?
------解决方案--------------------
推荐第一种方案,这样可以在横向和纵向上取得平衡.
------解决方案--------------------
按1000个点,10秒一次的话,每天 6*60*24*1000 = 8640000条
这样每天一张表是可以接受的,但是从你的客户应用来看,你应该创建一张统计表,然后每天定时(如凌晨0点)将昨天的数据自动根据用户应用统计于统计表中,这样业务就分成了两部分,一部分是维护每天的实际信息表,另一部分是从每天更新的统计表中直接提取信息满足客户应用要求。不要每次统计都先统计,这样数据量大时耗时不说,还存在大量的重复工作。
------解决方案--------------------
就是要做到时间段一次建表。下次建立新的,按时间排列是一样的
------解决方案--------------------
比较倾向于使用LZ的第2种方案。 

每日的数据向道兄说的,8640000行,并不是很多。 

每日统计计算,使用ssis处理一下,将统计数据放入数据仓库,cube什么的提供给前台用户查询即可。 

------解决方案--------------------
如果不是按每个点的值直接查询的,可以把1000个点的值,按文本/ini/xml/json格式存放到一个字段
------解决方案--------------------
这个数据量,分表示必须的,其实动态增加标的难度与动态增加字段的难度差不多。

查询统计问题,可以用作业把每天的数据统计出来,放到中间表,查询就直接查询中间表。

------解决方案--------------------
也倾向于第二种方案,但肯定是要做分表处理,至于报表的数据统计需要楼主再建立相关的表来存已经统计过的数据,类似于日结这样的设计。
------解决方案--------------------
这个。。。
不管是哪种方案,数据量是不会少的啊!
你的列多了,记录数是会少。但是这样做对性能有很大提升么?列多一样会消耗时间啊

个人认为第二种方案好,便于处理。数据量大的话就分表
------解决方案--------------------
先了解需求再找到解决方法,
如这张表,会不会涉及到统计,是否涉及到实时检索数据,查询数据有没有时间范围,热点数据在哪一时间范围,等等。
分析了这些,才会考虑使用分区表,如果分区表就无法解决,可以考虑分表分库,对于非热点数据作归档操作。


------解决方案--------------------
数据量虽然很大,但是行大小很小,而且只有插入操作,数据量还不是真正意义上的大表
我觉得采用第二种方案,如OrchidCat所说,做每日统计到统计表