已知一个用户的经纬度,咋从一张100万条数据的商户表里取出离这个用户最近50条商户呢

现在Mongodb也支持空间查询 比如语句$near 关键字。可以把空间坐标和商户信息放到里面。进行查询。
■网友
已有的几个回答中的方案成本都太高了。一个成本比较低的方案是建一个Geohash字段,生成Geohash时,经纬度的精度要高。然后按照查找附近50条的这个需求,调整查询hash的模糊匹配长度。这样成本较低,比较容易实施。
■网友
可以试一试地图资源管理平台将100万条数据导入地图上,选中用户的那个点,附近的商户信息可视化的展示在地图上了,谁近谁远一目了然。如果不想要可视化编辑的过程也可以通过GIS空间运算的形式用编码来实现
已知一个用户的经纬度,咋从一张100万条数据的商户表里取出离这个用户最近50条商户呢



■网友
题主问的问题是经典的knn问题,建议直接搜索knn相关算法。具体到空间查询可以建立空间索引,目前有的数据库如Mongodb是内置了空间索引的。
■网友
MySQL 空间座标查询 MySQL :: MySQL 5.5 Reference Manual :: 12.17 Spatial Extensions
■网友
使用MySQL的空间特性吧~~~不过只有MyISAM引擎支持,你可以设置为索引就可以改善性能~~~再去对应的数据...:1.表A:UID,空间信息字段;存储引擎为:MyISAM2.表B:UID,用户信息字段;存储引擎为:InnoDB;
■网友
mongodb的2d geospatial indexes的概念和用法举例 Geospatial Queries with 2d Indexes
■网友
geo hash 具体谷歌吧
■网友
如果你要自己实现,可以试试KDTree, RTree, QuadTree之类的算法。
■网友
最好需要使用spatial database来快速高频率查询
通常geom列存储地理信息 lon,lat ,crs
推荐 postgis
查询sql为:
select a.name from (Select a.name,a.geom from tbl_商家位置)as a where ST_Distance(dian_A,a.geom,TRUE) \u0026lt; 50
可以通过建立spatial indexes 显著提高查询速度 通常是rtree

但是 大多数情况下 都是以街道为主的网格查询 这就稍微复杂 需要pg routing
https://docs.pgrouting.org/2.0/en/doc/index.html
其详细文档

这个问题是最简单的 网格查询
使用pgr_drivingDistance 一行就能得到结果

【已知一个用户的经纬度,咋从一张100万条数据的商户表里取出离这个用户最近50条商户呢】 网格查询一般是都是基于dijastra优化算法 个别算法调整会在复杂情况下结果不同


    推荐阅读