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

2017-11-27 14:07:57 +08:00
 dbfox
V 友一般都有哪些好的技术方案?
4330 次点击
所在节点    程序员
30 条回复
warlock
2017-11-27 14:08:53 +08:00
GeoHash
dbfox
2017-11-27 14:26:48 +08:00
发现 redis 有这样的功能

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

命令描述:

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

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

m 表示单位为米。
km 表示单位为千米。
mi 表示单位为英里。
ft 表示单位为英尺。
blacklee
2017-11-27 14:31:04 +08:00
你有多少用户?
dbfox
2017-11-27 14:35:54 +08:00
@blacklee 20 万
Immortal
2017-11-27 14:37:31 +08:00
以前看过一个早期的文章 年代有点久远 LZ 可以重新测试和评估
https://ruby-china.org/topics/22059
Immortal
2017-11-27 14:38:21 +08:00
你说的 redis geo 功能 是去年还是什么时候更新才加上的 所以那时候没测试数据 具体多 google
blacklee
2017-11-27 14:40:30 +08:00
@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 14:41:28 +08:00
mongo 是可以的。
xmadi
2017-11-27 15:04:10 +08:00
redis 和 mongodb 自带地理位置查询
shenhhd
2017-11-27 15:08:37 +08:00
也可以考虑用 Elasticsearch 这个。速度还不错,自带距离。
dbfox
2017-11-27 15:09:50 +08:00
@blacklee 5000 万数据,23.5 毫秒? 这用的是 Postgres ?
freehere
2017-11-27 15:20:44 +08:00
放到百度地图数据库
killergun
2017-11-27 15:25:56 +08:00
高德地图不是现成的
sunjiayao
2017-11-27 15:29:42 +08:00
可以使用 redis mongo 这些自带地理索引的数据库
也可以用 geohash 自己实现
vus520
2017-11-27 15:38:47 +08:00
mongodb, redis, postgres, elasticsearch
dbfox
2017-11-27 16:36:36 +08:00
@vus520 目前觉得 redis 使用最简单
billwsy
2017-11-27 16:55:38 +08:00
Nearest Neighbor 的那一套方法可以不?
teddy2725
2017-11-27 17:14:32 +08:00
redis es pg
minvacai
2017-11-27 17:22:12 +08:00
MongoDB, MySQL 其实都可以的
fivesmallq
2017-11-27 17:22:54 +08:00
mongo 性能不太好,推荐 es

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

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

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

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

© 2021 V2EX