很久没有写文章了,最近太忙,每天晚上10点以后才下班
需求:今天碰到一个需求是将骑手(相当于美团外卖的骑手)的实时定位保存下来,或者像京东物流的送货员的轨迹,我们可以看到我们的快递到哪个地方了,快递员现在在哪个位置。
思路:骑手登录之后前端每1分钟上传GPS定位,后端接收数据先保存到redis中, 然后采用定时任务批量处理redis中的数据批量存入mysql中。(暂时采用该方案,以后可能直接用HBase之类的了)。
实现:
前端上传的实体,前端也是批量上传的,List
前端上传位置的List直接存Redis,并且以上传集合的手机号为key,因为同一台手机上传的手机号肯定是相同的。
存到Redis的结构是list的形式;
手机号为key, 下面是上传的集合对象;
1、从redis中批量获取每个key前n个数据。
2、入库,批量写入mysql数据。
3、删除redis中已经入库的数据(按手机号分组)
1>常规方法:
这里我就不贴出改方法要消化的时间了,处理一万条数据反正让人吐血。
2>多线程方法处理:
这样处理时间稍微好点,但是还是有点吐血;
3>管道方式处理:
把循环遍历的方法放到管道中,大家自己去测试一下吧,效率是几十倍甚至上百倍,这就是与Mysql一样批量处理的好处。
请大家多多指教,验证一下效率如何。