讨论数量:
- 直接 MySQL 根据经纬度 查 5/10 公里内的骑手,然后安装距离排序就行,按公里累加查有点不合适。
- 骑手位置信息同步至 reids , 用 redis geo,也可以查询排序,这个更适合一点
- 实在想轮询就循环分块查询,限制查询数据的量,结果只保留排名前10的骑手,没有看出来需要递归的点
mysql有现成好用的计算距离的函数的,把骑手经纬度 定时保存到表里,直接查出按消费者距离排序的所有骑手,不是很方便吗?
$sql = 'select st_distance_sphere(point( ?,? ),
point( machine_report_longitude, machine_report_latirtude ) ) distance
from wws_machine where id= ? ';
感觉5次轮询就把内存打爆了有点奇怪啊。 要不换种实现:骑手每N分钟上报位置,存到 redis(数据库也行),订单来了就取当时所有骑手的位置信息和用户位置做计算(存数据库要自己算),把订单派给最近的骑手就完了。也不用轮询,简单的计算也不耗内存。如果用 redis 的话,它自带的geo还更快。 redis geo 没用过,不过应该不难的。mongo 也有 geo
推荐文章: