日期:2014-05-20  浏览次数:20703 次

高分寻求解决方案
小弟帮人开发了一套出租车监控定位系统,大概共有2000台出租车,每台出租车都装有GPS定位器,每台车每10秒实时的将定位数据发送到服务器,服务器采用VS2008编写了一个WINDOWS系统服务来接收数据,传输协议为TCP,数据保存在数据库,另外提供一个网站用来监控每台车的位置,网站不断地从数据库中读取最新的数据来更新车辆的最新位置。目前遇到的问题主要是性能问题:数据量大导致网页查询慢。2000台车每天24小时GPS不间断传输数据,GPS每10秒发送一次数据到服务器,每天服务器接收的总的数据量就是2000台X24小时X60分钟X每分钟6次=1728万条记录。这样系统会运行越来越慢。虽然创建了索引,定期清理数据,但随着时间越来越长,性能越来越慢。我想可能这种工作方式不太好,但水平有限,实在想不到有别的方法可以解决这个问题,我的想法是能不能不用数据库,WINDOWS服务接收到定位数据后,保存在内存里或者其它什么地方,然后网页可以用什么方法可以直接读取到数据?
------解决方案--------------------
海量数据处理
------解决方案--------------------
这种就是每一天备份一下数据库 到硬盘里

用job或者其他的方法来定时备份数据库

几天备份一次 或者一天备份一次

查询的时候采用分布式数据库查询

job备份数据库

分布式
------解决方案--------------------
我不清楚lz是怎么定期清理数据的方式。但是不是有索引就能加快查询速度,相反清理不好,容易导致索引碎片化,适得其反。需要在空闲的时候整理索引。
lz也可以考虑使用横向分隔,来提高你的查询速度。
个人觉得数据库系统还是一个比较好的东西,建议你去看看sql server技术内幕-存储引擎或者查询、调整和优化。
------解决方案--------------------
分表分区  是最简单的了   除此之外就 集群吧
负载均衡
------解决方案--------------------
服务器内存中只保存最后一次传输过来的位置信息。
后一次顶掉前一次,被顶掉的则进数据库,这个顶掉的间隔可以根据服务器状况来确定,毕竟,并不是每个数据都需要存到数据库吧。
网页查询分成两种情况,实时的和历史的,实时的只读内存,历史的去读数据库。

一眼看过去就是这么个思路。
------解决方案--------------------
数据库分表,按时间分表, 将需要查询的数据放在当前运行表中。
如无复杂统计, 可以考虑nosql, 看看mongodb。
如出现高峰并发问题,可以考虑msmq, 做异步存储。