每天数据量达到1000万怎样建表

哥本哈根 2012-08-30 07:48:43
现在有一个监控系统,监控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个测点,如果测点增多的话,那简直了……
...全文
539 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
Andy-W 2012-09-01
  • 打赏
  • 举报
回复
先了解需求再找到解决方法,
如这张表,会不会涉及到统计,是否涉及到实时检索数据,查询数据有没有时间范围,热点数据在哪一时间范围,等等。
分析了这些,才会考虑使用分区表,如果分区表就无法解决,可以考虑分表分库,对于非热点数据作归档操作。

DBA_磊仔 2012-09-01
  • 打赏
  • 举报
回复
数据量虽然很大,但是行大小很小,而且只有插入操作,数据量还不是真正意义上的大表
我觉得采用第二种方案,如OrchidCat所说,做每日统计到统计表
發糞塗牆 2012-09-01
  • 打赏
  • 举报
回复
不需要这样把,弄个主表,有一个监测点就插一条数据,然后弄个明细表(可以单表或多表),或者按照地区来划分,假设你的是全国范围的,那么按省或者市来分一个表,再按天来分区,这样下来其实数据量不会很大。
唐诗三百首 2012-08-31
  • 打赏
  • 举报
回复
推荐第一种方案,这样可以在横向和纵向上取得平衡.
tianhuo_soft 2012-08-31
  • 打赏
  • 举报
回复
如果每个测点 动态建表呢?
哥本哈根 2012-08-31
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

引用 2 楼 的回复:
引用 1 楼 的回复:

客户一般如何查看?分析哪种类型的情况居多?
多个测试可以分表。

一般每天都需要出一个报表,而且每周都会针对本周的这些数据进行一些分析,从中求出一些相关数据来改善检测设备的运行状态

设想过分表法 每天自动创建一个新表 但是 在统计的时候就很麻烦 这么大的数据,光查询就需要很长时间,设想过分阶段进行统计汇总,但是那样误差就会变得……
[/Quote]
那这样在统计的时候不好弄啊 特别是对于每周的固定计算来讲
quchen520 2012-08-31
  • 打赏
  • 举报
回复
这个。。。
不管是哪种方案,数据量是不会少的啊!
你的列多了,记录数是会少。但是这样做对性能有很大提升么?列多一样会消耗时间啊

个人认为第二种方案好,便于处理。数据量大的话就分表
AcHerat 2012-08-31
  • 打赏
  • 举报
回复
也倾向于第二种方案,但肯定是要做分表处理,至于报表的数据统计需要楼主再建立相关的表来存已经统计过的数据,类似于日结这样的设计。
昵称被占用了 2012-08-31
  • 打赏
  • 举报
回复
这个数据量,分表示必须的,其实动态增加标的难度与动态增加字段的难度差不多。

查询统计问题,可以用作业把每天的数据统计出来,放到中间表,查询就直接查询中间表。
haitao 2012-08-31
  • 打赏
  • 举报
回复
如果不是按每个点的值直接查询的,可以把1000个点的值,按文本/ini/xml/json格式存放到一个字段
Mr_Nice 2012-08-31
  • 打赏
  • 举报
回复
比较倾向于使用LZ的第2种方案。

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

每日统计计算,使用ssis处理一下,将统计数据放入数据仓库,cube什么的提供给前台用户查询即可。
wzh0413 2012-08-31
  • 打赏
  • 举报
回复
就是要做到时间段一次建表。下次建立新的,按时间排列是一样的
孤独加百列 2012-08-31
  • 打赏
  • 举报
回复
按1000个点,10秒一次的话,每天 6*60*24*1000 = 8640000条
这样每天一张表是可以接受的,但是从你的客户应用来看,你应该创建一张统计表,然后每天定时(如凌晨0点)将昨天的数据自动根据用户应用统计于统计表中,这样业务就分成了两部分,一部分是维护每天的实际信息表,另一部分是从每天更新的统计表中直接提取信息满足客户应用要求。不要每次统计都先统计,这样数据量大时耗时不说,还存在大量的重复工作。
SQL77 2012-08-30
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
引用 1 楼 的回复:

客户一般如何查看?分析哪种类型的情况居多?
多个测试可以分表。

一般每天都需要出一个报表,而且每周都会针对本周的这些数据进行一些分析,从中求出一些相关数据来改善检测设备的运行状态

设想过分表法 每天自动创建一个新表 但是 在统计的时候就很麻烦 这么大的数据,光查询就需要很长时间,设想过分阶段进行统计汇总,但是那样误差就会变得更大一些
[/Quote]
那你把测点当成列名。1000个放一表。另多少另建立表。
哥本哈根 2012-08-30
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

客户一般如何查看?分析哪种类型的情况居多?
多个测试可以分表。
[/Quote]
一般每天都需要出一个报表,而且每周都会针对本周的这些数据进行一些分析,从中求出一些相关数据来改善检测设备的运行状态

设想过分表法 每天自动创建一个新表 但是 在统计的时候就很麻烦 这么大的数据,光查询就需要很长时间,设想过分阶段进行统计汇总,但是那样误差就会变得更大一些
SQL77 2012-08-30
  • 打赏
  • 举报
回复
客户一般如何查看?分析哪种类型的情况居多?
多个测试可以分表。

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧