C#实时处理海量GPS定位信息的难题

wwwafa9 2012-03-19 11:09:12
系统概述

我们用C# 3.5做了一个Windows服务用来接收从GPS服务器发送来的海量定位信息(采用事件触发,我们订阅了GPS服务器的一个事件,GPS服务器不停地推送定位信息给我们),收到信息后做如下处理:

1、解析GPS定位信息;

2、存储GPS定位信息;

3、分发GPS定位信息给订阅了该GPS终端的客户端(发送Socket包到一个通信服务器专门处理分发事宜。接收GPS定位信息的服务和订阅GPS定位信息的客户端都连接到该通信服务器)


难题

1、由于GPS终端量很大(大概2万个),每秒上报的GPS定位信息非常多,系统处理不过来;

2、保存到数据库时会出现获取不到空闲连接的问题导致保存失败(数据库为Oracle 10G,最大连接数已改为200)。



求解决方案

不知道该采用哪种方式来处理该问题。要求同时接收和处理GPS定位信息。
...全文
286 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
wwwafa9 2012-03-19
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 linux7985 的回复:]

引用楼主 wwwafa9 的回复:
系统概述

我们用C# 3.5做了一个Windows服务用来接收从GPS服务器发送来的海量定位信息(采用事件触发,我们订阅了GPS服务器的一个事件,GPS服务器不停地推送定位信息给我们),收到信息后做如下处理:

1、解析GPS定位信息;

2、存储GPS定位信息;

3、分发GPS定位信息给订阅了该GPS终端的客户端(发送Socket包到一……
[/Quote]

分发历史信息也要保存(由通信服务器保存),分发的信息要用到已存储的GPS定位信息的ID。
所以要先存储GPS定位信息,再分发信息。这里有个先后顺序。
铜臂阿铁木 2012-03-19
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 linux7985 的回复:]

引用楼主 wwwafa9 的回复:
系统概述

我们用C# 3.5做了一个Windows服务用来接收从GPS服务器发送来的海量定位信息(采用事件触发,我们订阅了GPS服务器的一个事件,GPS服务器不停地推送定位信息给我们),收到信息后做如下处理:

1、解析GPS定位信息;

2、存储GPS定位信息;

3、分发GPS定位信息给订阅了该GPS终端的客户端(发送Socket包到一……
[/Quote]

= =怎么冒出个楼上来,楼上说得对。
铜臂阿铁木 2012-03-19
  • 打赏
  • 举报
回复
集群,或者分布式缓存+集中队列。不要一次性把数据放在内存或者想着一次就把那么多的东西存起来,很怼腚的。
烈火蜓蜻 2012-03-19
  • 打赏
  • 举报
回复
[Quote=引用楼主 wwwafa9 的回复:]
系统概述

我们用C# 3.5做了一个Windows服务用来接收从GPS服务器发送来的海量定位信息(采用事件触发,我们订阅了GPS服务器的一个事件,GPS服务器不停地推送定位信息给我们),收到信息后做如下处理:

1、解析GPS定位信息;

2、存储GPS定位信息;

3、分发GPS定位信息给订阅了该GPS终端的客户端(发送Socket包到一个通信服务器专门处理分发事宜。接收GPS……
[/Quote]

入库程序优化,先缓存,再一次性入库。

可以考虑用群集,多机器接收。处理。然后入库
莫忘初心svip 2012-03-19
  • 打赏
  • 举报
回复
使用集群
wwwafa9 2012-03-19
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 carpathia 的回复:]

不难,栈队列,负责将信息存储起来
接收端采用IOCP完成端口,异步收发,2W连接不是问题,将数据存储到栈中,等待入库
数据库缓冲池,预开辟200个连接,从栈中获取数据,异步操作数据库存储

最大利用你的服务器资源,GPS一般6秒左右传送一次数据,这样的方案,在服务器上应该是轻松可以带起来的
[/Quote]

你没搞懂我的意思。
Carpathia 2012-03-19
  • 打赏
  • 举报
回复
不难,栈队列,负责将信息存储起来
接收端采用IOCP完成端口,异步收发,2W连接不是问题,将数据存储到栈中,等待入库
数据库缓冲池,预开辟200个连接,从栈中获取数据,异步操作数据库存储

最大利用你的服务器资源,GPS一般6秒左右传送一次数据,这样的方案,在服务器上应该是轻松可以带起来的
足球中国 2012-03-19
  • 打赏
  • 举报
回复
2万个的没有处理过。几百个的弄过。分组保存至一起。比如一百个一组。等到这一组满了。统一保存到数据库。
如果是2万个连接一秒钟一个。一次32字节。楼主够强。
happytonice 2012-03-19
  • 打赏
  • 举报
回复
2万个用户,分下类吧,放一块太挤。
startstartsvip 2012-03-19
  • 打赏
  • 举报
回复
[Quote=引用楼主 wwwafa9 的回复:]
系统概述

我们用C# 3.5做了一个Windows服务用来接收从GPS服务器发送来的海量定位信息(采用事件触发,我们订阅了GPS服务器的一个事件,GPS服务器不停地推送定位信息给我们),收到信息后做如下处理:

1、解析GPS定位信息;

2、存储GPS定位信息;

3、分发GPS定位信息给订阅了该GPS终端的客户端(发送Socket包到一个通信服务器专门处理分发事宜。接收GPS……
[/Quote]

干吗用的,方便透露吗?
栋栋拐栋栋 2012-03-19
  • 打赏
  • 举报
回复
群集 就好了

110,477

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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