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

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

系统概述

我们用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定位信息。
--------------------编程问答-------------------- 使用集群 --------------------编程问答--------------------
引用楼主 wwwafa9 的回复:
系统概述

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

1、解析GPS定位信息;

2、存储GPS定位信息;

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


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

可以考虑用群集,多机器接收。处理。然后入库 --------------------编程问答-------------------- 集群,或者分布式缓存+集中队列。不要一次性把数据放在内存或者想着一次就把那么多的东西存起来,很怼腚的。 --------------------编程问答--------------------
引用 2 楼 linux7985 的回复:
引用楼主 wwwafa9 的回复:
系统概述

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

1、解析GPS定位信息;

2、存储GPS定位信息;

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


= =怎么冒出个楼上来,楼上说得对。 --------------------编程问答--------------------
引用 2 楼 linux7985 的回复:
引用楼主 wwwafa9 的回复:
系统概述

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

1、解析GPS定位信息;

2、存储GPS定位信息;

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


分发历史信息也要保存(由通信服务器保存),分发的信息要用到已存储的GPS定位信息的ID。
所以要先存储GPS定位信息,再分发信息。这里有个先后顺序。 --------------------编程问答-------------------- 群集  就好了 --------------------编程问答--------------------
引用楼主 wwwafa9 的回复:
系统概述

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

1、解析GPS定位信息;

2、存储GPS定位信息;

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


干吗用的,方便透露吗?
--------------------编程问答-------------------- 2万个用户,分下类吧,放一块太挤。 --------------------编程问答-------------------- 2万个的没有处理过。几百个的弄过。分组保存至一起。比如一百个一组。等到这一组满了。统一保存到数据库。
如果是2万个连接一秒钟一个。一次32字节。楼主够强。 --------------------编程问答-------------------- 不难,栈队列,负责将信息存储起来
接收端采用IOCP完成端口,异步收发,2W连接不是问题,将数据存储到栈中,等待入库
数据库缓冲池,预开辟200个连接,从栈中获取数据,异步操作数据库存储

最大利用你的服务器资源,GPS一般6秒左右传送一次数据,这样的方案,在服务器上应该是轻松可以带起来的 --------------------编程问答--------------------
引用 10 楼 carpathia 的回复:
不难,栈队列,负责将信息存储起来
接收端采用IOCP完成端口,异步收发,2W连接不是问题,将数据存储到栈中,等待入库
数据库缓冲池,预开辟200个连接,从栈中获取数据,异步操作数据库存储

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


你没搞懂我的意思。
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,