轨迹系列——记某真实项目中轨迹展示查询效率优化方案二(日志模式)

文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/

1.    方案目标

       该方案需要满足以下几点:

       支持人员当天轨迹快速获取(查询)。

       支持轨迹高并发读、写(实际项目中轨迹高并发读情况很少)。

       保证所有(历史)轨迹数据的完整性、不丢失。

2.方案探讨详细描述

2.1支持轨迹快速查询——轨迹日志文件方案

       海量数据高效存储、查询,这个场景本身是比较适合NoSQL数据库运用的,但是考虑到该方案实施的难度(对工程实施、维护、研发成本),仅仅为了解决轨迹而采用该方案不是一个最好的选择。

       这里,我们引用日志的概念。设想将每天产生的轨迹以日志文本形式来存储,定义好日志的存储规则,那么我们的轨迹查询将变化成轨迹日志文件的检索和解析,磁盘检索的效率将大大提高。

       该方案涉及到的核心问题便是,轨迹日志的存储规则。

2.2支持轨迹高并发读、写——轨迹日志存储规则定义

       针对每天生成的轨迹建立一个以日期命名的文件夹,应该是可以肯定的。

       但是,在日期文件夹中,是针对每个时段建立一个轨迹文件,还是针对每个人建立一个日志文件则是需要我们进一步讨论的。

2.2.1分时段记录优缺点讨论

       优点:

       a.文件数量少,最多24个,如果保持住每个时段的日志文件连接,写入操作高并发支持会很好。

       b.针对以时间段查询、并且不分人员获取所有轨迹的场景,十分合适,适合GPS厂家的需求。

       缺点:

       a.我们的运用场景更多的是查询单个人员当天的所有轨迹,如果按照这个规则,那么轨迹查询得遍历24个文件,还得解析各文件获取对应人员的轨迹。

2.2.2分人记录优缺点讨论

       优点:

       a.很符合我们的业务场景,每次单人单天轨迹查询时,只需要按照轨迹存储规则就可以获取到该人员的对应轨迹文件。

       b.针对前端轨迹展示业务,可以将轨迹文件视做静态资源而进行静态伺服,前端直接访问解析。

       c.针对后台进行轨迹分析,由于该文件大小很小,加载进入后台进行分析也没有IO瓶颈。

       缺点:

       a.由于人员一般会比较多,如果分人存储,假设有1000个人,那么等于有1000个日志文件。高频率对1000个文件分别进行写入操作,可能出现IO瓶颈。

2.2.3规则总结

       经过认真分析,依然选择分天分人规则,原因有以下几点:

       a.符合我们的业务场景运用。

       b.针对高并发读有很大优势。

       c.虽然理论上其有日志文件多、高并发写的劣势。但是这两点都可以进行避免。

       日志文件多的问题:由于日志本身只是做记录使用,可以再制定一个定时清理的任务,比如一个月清理一次,那么即使1000个人,一个月3W个日志分布在30个日志文件夹,不是不能接受的。

       高并发写的问题:即使我们规定手机上报时间是5S,手机也并不是一个实时写入的过程,而是还有一个批量上传的参数。所以其更可能是两分钟或者更久批量上传一次数据,那么我们后台读取文件、写入批量内容、关闭该文件,对IO的冲击会大大减小。并且,由于是不同文件的操作,排队等待一个文件操作的问题也会大大减小。

 

2.3历史轨迹数据安全性、完整性——历史轨迹表用作备份

       针对我们之前的历史轨迹表,应该继续保留。日志文件本身的安全性是不够的,如果出现误删除等问题,轨迹数据将很容易丢失。

       所以历史轨迹表依然保存,定期做数据备份迁移。

3.针对实时轨迹存储的说明

       目前的实时轨迹存储逻辑为,手机端批量上传GPS时,将该人员离上传时间最近的GPS点保存(saveorupdate)至tc_patrol_state表中。

       该业务逻辑在多个已有项目中没有发现性能瓶颈,可以保留。

4.项目中原有逻辑涉及调整的部分

       a.手机端上报轨迹,增加对轨迹日志文件的操作。

       b.GIS端的前段轨迹展示、后台轨迹信息挖掘,做相应修改。

       c.MIS端如果有跟轨迹表相关联的业务,需要做对应修改。

 

                         -----欢迎转载,但保留版权,请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/

                                                                            如果您觉得本文确实帮助了您,可以微信扫一扫,进行小额的打赏和鼓励,谢谢 ^_^

                                      

时间: 2024-08-25 10:48:36

轨迹系列——记某真实项目中轨迹展示查询效率优化方案二(日志模式)的相关文章

c语言-vs2010win32项目中如何展示点的合并

问题描述 vs2010win32项目中如何展示点的合并 win32中,用点代表石子,怎样才能用动画形式展示石子之间的合并,最终合成一堆 新手,刚刚解除windows编程,望大神不吝赐教~! 求代码举例,邮箱285779230@qq.com 解决方案 做动画建议用flash做然后嵌入窗口中,当然也可以SetTimer()然后算好路径,不停的刷新WM_PAINT.

找出mysql中like模糊查询效率低的sql语句

相比update和insert,一般查询应该是数据库中操作最频繁的.而在有些应用场景需要用到like模糊查询,那么对于大数据,查询的时候就要注意了.   现在来分析一下为什么like语句查询的效率会很低,测试数据共4000000条,如下图:     第一步:不使用索引 下图可以看出,不使用索引的时候普通查询与like查询的耗时相当,like略长,这也是必然的,因为它要进行额外的算法.     第二步:使用索引   如下图,使用索引后,普通查询的耗时基本算是秒查,非常快:而like查询还是耗时一秒

B2C站购物流程中优惠券的交互设计优化方案

我们在互联网上经常买东西,也会经常收到优惠券,最近有空做了一个小调研,在一个网站上,有30%的用户拥有超过10张的生效优惠券,但是,当我们使用优惠券的时候,我们发现一个问题,很多网站在购物结算页面只能显示10张优惠券,那么,如果多于10张优惠券后,我们怎么选择使用呢? 我模拟一个用户,当我去一家超市,我购买了很多或者单件商品后,我发现我包包里有N张优惠券,我开始纠结了,我该使用那张呢?于是,我开始翻包里的优惠券,看看哪张快过期了,哪张是我这次想用的,我下次使用的,平时呢,不会理这些优惠券,只有当

请问在真实企业WEB项目中,一般如何处理异常的。

问题描述 本人正在做毕业设计,是一个WEB系统(有点老土,勿喷 ).自己对异常处理还有日志记录这一块不太懂.想了解下在真实的企业WEB项目中是如何处理异常,并输出日志的.--------------------------------我现在是这样来处理的,定义了一个可嵌套的业务层 checked 异常 BusinessInterruptException extends Exception,再定义了一个 可嵌套的底层 unchecked 异常 DataAccessException extend

在WebSphere ESB中创建一种基于数据库的动态缓存模式

根据已普遍被人们接受的 SOA 架构,SOA http://www.aliyun.com/zixun/aggregation/13748.html">基础架构中的集成层为其他组件提供了无状态服务.所以在任何 SOA 实现中,数据会流经后端与前端系统之间的集成层.依据这一方案,许多请求会反复访问相同的信息.因此,将数据缓存在集成层中是一种限制资源消耗和改善响应时间的有效方式. 在一个最新的项目中,作者面临着扩展简单的缓存模式的需求.集成层提供了服务,使一个基于门户的前端可支持用户使用滚动.过

轨迹系列——WebGIS中使用ZRender实现轨迹前端动态播放特效

文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.背景 项目中需要在地图上以时间轴方式播放人员.车辆在地图上的历史行进轨迹.在之前的博客中我们谈到了如何对轨迹数据进行滤波.平滑.聚类等,均是为让轨迹线变得简化优美,这里我们将和大家一起探讨如何将轨迹以播放的效果在前端地图上展示. 2.技术选型 2.1选型结论 GIS的前端框架我们选用的是AGS JS(3.18).选这个前端框架主要是基于浏览器的支持情况,我们要求IE

轨迹系列——一种基于中值滤波的轨迹纠偏方法和几点思考

文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.背景 在无路网的情况下,如何进行轨迹纠偏也是一个很多人在研究的内容,各种方案均有很多,有基于不同滤波算法的,也有基于机器学习的,等等.这里,我探讨一种实现相对简单的基于中值滤波来进行轨迹纠偏的方法. 2.中值滤波简介 中值滤波是基于排序统计理论的一种能有效抑制噪声的非线性信号处理技术,中值滤波的基本原理是把数字图像或数字序列中一点的值用该点的一个邻域中各点值的中值代

传感器-关于Android开发中轨迹回复的问题

问题描述 关于Android开发中轨迹回复的问题 最近我在做一个项目,需要利用手机传感器进行手机空间运动轨迹恢复,我查阅了很多资料,遇到如下问题 关于这个方法public static boolean getRotationMatrix (float[] R, float[] I, float[] gravity, float[] geomagnetic),其中gravity官方推荐用type_accelerometer的数据,同时说如果在加速状态可能会不准确 "The matrices ret

轨迹系列——车载GPS对接方案汇总小结(809、自定义协议、前置库、WS)

文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.背景          最近在不同项目中对接了多个车载GPS厂商服务终端,绝大多数厂商可以提供809协议的数据对接,还有部分可以提供自定义协议等方式的对接.多个项目中,我公司处于略强势地位,所以根据现场实际的项目进度和部署环境以及对方支持的对接方式,提出了不同的对接方案.这里做个总结. 2.809协议对接 2.1协议背景        2011年5月10日中国交通通