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定位信息。
--------------------编程问答-------------------- 使用集群 --------------------编程问答--------------------
入库程序优化,先缓存,再一次性入库。
可以考虑用群集,多机器接收。处理。然后入库 --------------------编程问答-------------------- 集群,或者分布式缓存+集中队列。不要一次性把数据放在内存或者想着一次就把那么多的东西存起来,很怼腚的。 --------------------编程问答--------------------
= =怎么冒出个楼上来,楼上说得对。 --------------------编程问答--------------------
分发历史信息也要保存(由通信服务器保存),分发的信息要用到已存储的GPS定位信息的ID。
所以要先存储GPS定位信息,再分发信息。这里有个先后顺序。 --------------------编程问答-------------------- 群集 就好了 --------------------编程问答--------------------
干吗用的,方便透露吗?
--------------------编程问答-------------------- 2万个用户,分下类吧,放一块太挤。 --------------------编程问答-------------------- 2万个的没有处理过。几百个的弄过。分组保存至一起。比如一百个一组。等到这一组满了。统一保存到数据库。
如果是2万个连接一秒钟一个。一次32字节。楼主够强。 --------------------编程问答-------------------- 不难,栈队列,负责将信息存储起来
接收端采用IOCP完成端口,异步收发,2W连接不是问题,将数据存储到栈中,等待入库
数据库缓冲池,预开辟200个连接,从栈中获取数据,异步操作数据库存储
最大利用你的服务器资源,GPS一般6秒左右传送一次数据,这样的方案,在服务器上应该是轻松可以带起来的 --------------------编程问答--------------------
你没搞懂我的意思。
补充:.NET技术 , C#