问题描述
系统概述我们用C#3.5做了一个Windows服务用来接收从GPS服务器发送来的海量定位信息(采用事件触发,我们订阅了GPS服务器的一个事件,GPS服务器不停地推送定位信息给我们),收到信息后做如下处理:1、解析GPS定位信息;2、存储GPS定位信息;3、分发GPS定位信息给订阅了该GPS终端的客户端(发送Socket包到一个通信服务器专门处理分发事宜。接收GPS定位信息的服务和订阅GPS定位信息的客户端都连接到该通信服务器)难题1、由于GPS终端量很大(大概2万个),每秒上报的GPS定位信息非常多,系统处理不过来;2、保存到数据库时会出现获取不到空闲连接的问题导致保存失败(数据库为Oracle10G,最大连接数已改为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秒左右传送一次数据,这样的方案,在服务器上应该是轻松可以带起来的
你没搞懂我的意思。