当前位置:编程学习 > C#/ASP.NET >>

web搜索,海量数据处理

环境:asp.net+sql2005


需求:15台设备接收gps/gprs无线数据,数据接收后通过程序存储到sql2005中的一张表中,表结构如下:
uintId(设备Id)  dataType(数据来源类型gps/gprs)  receiveTime(数据接收时间)  data(接收到的数据)

这个表结构核心字段是unitId和receiveTime。
数据接收的频率大概为每5秒接收一条数据。可能设备24小时一直开着,连续开几个月。所以数量量算得上是海量。
程序的关键问题是15台设备的所有时间段的数据全部存储在sql2005中的唯一一张表中。


问题:用户需要通过设备号和时间段(接收数据的时间段),即通过uintid和receiveTime两个字段来检索出指定设备在指定时间范围内接收到的数据。
因为数据量是海量的,而且都存储在一张表中。
因此有时会出现连某个设备在某1分钟内的数据都搜索不出来,因为系统默认的安全请求响应时间很短
而在这种单一的海量数据库表中要想搜索到数据,甚至检索结果只有一条数据,都需要很长的响应时间
所以程序会无响应或抛出time request out的异常。


解决办法:
1、给receiveTime加索引,因为数据量过大,这样在一定程度上会造成服务器资源的浪费。
2、按设备号动态创建存储数据的表,15台设备就对应15张存储设备接收到的数据的数据表。以后添加设备同时在库中动态创建表。
这样就把1张存储数据的表拆分成了15台设备对应的15张表。
但这样似乎还是不足于满足需求中的海量数据检索,而且如果用户把数据大都集中在其中少量设备中的话,问题会更加突出。
3、原理与第2种方案类似,但不按设备来分,而是按数据接收的时间来分,比如1个月或半个月动态添加一张接收数据的表。
这种方案似乎比第2个方案要更合理点。但是用户有可以搜索一个设备下3个月的数据,真这样的话,就得跨表搜索,
这样将更加复杂和浪费。

期望:这个问题确实比较复杂,没处理过这种极端情况。希望有高手能给个合理的解决方案,并估计出方案的难度。

给出解决方案的我会单独再追加100分 --------------------编程问答-------------------- 很牛X的问题 关注一下。 --------------------编程问答-------------------- 没遇到过,期待高人出现。

我就知道一个分区表 --------------------编程问答-------------------- csdn “的我回复的帖子” 不就是解决方案么
--------------------编程问答-------------------- 什么“乱七八糟的”的?连建立个索引都被认为是“造成服务器资源的浪费”,那你还查询给屁啊。

你知道全文检索吗?人家检索索引都快赶上正文的容量了,也没听说人家抱怨不值得建立索引啊。 --------------------编程问答-------------------- 给lz讲一个笑话:从前有兄弟两个出去打猎,看见头顶飞来几只大雁,哥哥说,我们射下来带回去煮着吃。弟弟一听就着急了,说怎么能煮着吃,水一烧肉老了不好吃,还是烤着吃。哥哥说,烤着不好吃,还是煮着吃好。于是两个人吵起来了。吵了半天,大雁早飞走了。

很多人天天都是什么海量数据什么高性能,事实上这些讨论一点意义也没有。如果你连NoSQL、Hadoop这些都没用说过的话。 --------------------编程问答-------------------- 太搞笑了吧?就这点数据还叫海量啊?


就那点数据,一台PC足以搞定了
http://blog.csdn.net/sooch/article/details/6661029 --------------------编程问答-------------------- 多数都是重搜,您开小时应该片写
如果是这样,应该用磁盘机没有其他办法
重搜的花要将数据进行加工、整理形成DW
--------------------编程问答-------------------- 路过 ,不做任何评价 --------------------编程问答-------------------- 参考参考 --------------------编程问答-------------------- luguo --------------------编程问答-------------------- 没个几千万的数据也好意思称“海量”? --------------------编程问答-------------------- 按15台设备,6个月给你算了一下,数据貌似不是很多!也就几千万条。
应该一台高性能的服务器就能搞定。索引是必须的。
你只要获取自身要的数据,用SQL查询语句应该就能搞定啊。


可能我想得太简单了。 --------------------编程问答-------------------- 叫你们经理去处理好了 --------------------编程问答-------------------- 按楼主说的15台设备,大概每5秒接收到一条数据的话...
15太设备一个月大约是7776000(七百七十七万六千)条...
“可能连续要开几个月”,加入按一季度三个月算,每月按30天...就是23328000(两千三百三十二万八千)条..
如果要是系统运行了一年,数据大约是:93312000条...
差不多算一亿条了吧...

请问6楼 11楼这数据如果不算海量你们可以轻松的处理吗?那么就请帮帮楼主吧... --------------------编程问答-------------------- 这个数据量很大,但算不算海量。
1 可以的话使用oracle
2 1张历史记录表,1张当前记录表
3 做好分区
4 索引

做的一个项目核心业务表数据量每月在3-4000w 使用1 3 4 系统已能稳定运行 --------------------编程问答-------------------- 我想可能需要用oracle --------------------编程问答--------------------  顶了    --------------------编程问答-------------------- 百度一下NOSQL,感觉到差距了啊!!! --------------------编程问答-------------------- 建立好分区,索引
查询上亿的数据也没问题

你的问题是返回上百万条记录

你说查3个月的记录,要是都返回回来的,你要多达的带宽才能传出来

--------------------编程问答-------------------- 一种最简单的方案就是用空间换速度

还有就是用金钱换速度
--------------------编程问答-------------------- 学习了 --------------------编程问答-------------------- 建议使用trs server 百万数据秒级响应trs server  或者联系我 261933557 --------------------编程问答-------------------- 我滴神,15台~~~

俺这七八千台,现在一天的数据库都18个G~ --------------------编程问答-------------------- 看看。 --------------------编程问答-------------------- 我算了一下,确实很小啊,每个月刚7百多万。 所以对下面你说的有点疑问:

“因此有时会出现连某个设备在某1分钟内的数据都搜索不出来”

既然索引之类的都加了,可能会出现这种情况吗?


如果数据量真的很大,对数据无非是水平分割和垂直分割,水平分割按年为单位都没问题。 对了,如果你的data字段特别大,用个view就可以解决。

还可以用一些缓存方案,比如把近一个月的索引或者简单数据缓存出来,这样会快很多。 --------------------编程问答-------------------- MARK --------------------编程问答-------------------- mark  --------------------编程问答-------------------- 考虑用hbase吧,专门解决楼主这类大数据量快宿查询的问题,以unitId和receiveTime联合做key,通过hbase的范围查询可以在秒级获得所需数据。 --------------------编程问答-------------------- 用oracle吧。 --------------------编程问答-------------------- i like. mark. --------------------编程问答-------------------- --------------------编程问答-------------------- 卡。。。。。。。。路过打酱油。。。。。 --------------------编程问答-------------------- 这个数据量称不上海量。查询速度有问题,就是在索引,索引是必须得,还有可以使用分区表。

当然也可以按时间分成不同的表,把他们放在不同的盘上,不会对查询速度有多少影响。

还可以采用数据库复制,使用两台(或多台)数据库服务器,一个发布服务器专门负责写入,一个(或者多个)订阅者专门实现查询。

很多人建议用oracle,如果是单台服务器,oracle能比得上sql server? 当然你可以使用多个oracle来实现负载均衡,这个是sql server的弱项。
补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,