技术问题: APP 需要做一个附近的人的功能,怎么做呢?数据库没法查性能也差(已知在线用户经纬度)

2017 年 11 月 27 日
 aidevs
V 友一般都有哪些好的技术方案?
5608 次点击
所在节点    程序员
30 条回复
warlock
2017 年 11 月 27 日
GeoHash
aidevs
2017 年 11 月 27 日
发现 redis 有这样的功能

命令:GEORADIUS key longitude latitude radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count]

命令描述:

以给定的经纬度为中心, 返回键包含的位置元素当中, 与中心的距离不超过给定最大距离的所有位置元素。

范围可以使用以下其中一个单位:

m 表示单位为米。
km 表示单位为千米。
mi 表示单位为英里。
ft 表示单位为英尺。
blacklee
2017 年 11 月 27 日
你有多少用户?
aidevs
2017 年 11 月 27 日
@blacklee 20 万
Immortal
2017 年 11 月 27 日
以前看过一个早期的文章 年代有点久远 LZ 可以重新测试和评估
https://ruby-china.org/topics/22059
Immortal
2017 年 11 月 27 日
你说的 redis geo 功能 是去年还是什么时候更新才加上的 所以那时候没测试数据 具体多 google
blacklee
2017 年 11 月 27 日
@dbfox 用 Postgres 数据库,简单弄个索引就完事了。

我自己的笔记本,MacBook Pro Late 2013,2 GHz Intel Core i7,8 GB 1600 MHz DDR3

在 Rails console 里执行了两条语句,你可以看到所需时间

[3] pry(main)> PoiBasic.count
(20053.1ms) SELECT COUNT(*) FROM "poi_basics"
=> 56785460
[4] pry(main)> PoiBasic.order("latlng <-> point(30.333, 120.222)").limit(50)
PoiBasic Load (23.5ms) SELECT "poi_basics".* FROM "poi_basics" ORDER BY latlng <-> point(30.333, 120.222) LIMIT 50
owenliang
2017 年 11 月 27 日
mongo 是可以的。
xmadi
2017 年 11 月 27 日
redis 和 mongodb 自带地理位置查询
shenhhd
2017 年 11 月 27 日
也可以考虑用 Elasticsearch 这个。速度还不错,自带距离。
aidevs
2017 年 11 月 27 日
@blacklee 5000 万数据,23.5 毫秒? 这用的是 Postgres ?
freehere
2017 年 11 月 27 日
放到百度地图数据库
killergun
2017 年 11 月 27 日
高德地图不是现成的
luman
2017 年 11 月 27 日
可以使用 redis mongo 这些自带地理索引的数据库
也可以用 geohash 自己实现
vus520
2017 年 11 月 27 日
mongodb, redis, postgres, elasticsearch
aidevs
2017 年 11 月 27 日
@vus520 目前觉得 redis 使用最简单
billwsy
2017 年 11 月 27 日
Nearest Neighbor 的那一套方法可以不?
teddy2725
2017 年 11 月 27 日
redis es pg
minvacai
2017 年 11 月 27 日
MongoDB, MySQL 其实都可以的
fivesmallq
2017 年 11 月 27 日
mongo 性能不太好,推荐 es

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://v2ex.ih06.com/t/409904

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX