• 请不要在回答技术问题时复制粘贴 AI 生成的内容
drroot
V2EX  ›  程序员

哪个数据库 SQL or NOSQL 处理距离最方便?

  •  
  •   drroot · Jan 8, 2017 · 7029 views
    This topic created in 3596 days ago, the information mentioned may be changed or developed.

    网站会有频繁的如下搜索请求: 离 <邮编 xxx> <1 公里> 内所有的 <餐馆>

    以上:

    1. <邮编 xxx>为任何源地址,可以是一个 ip, 邮编,城市名字
    2. <1 公里> 为距离,也可以是 1 英里, 2 英里, 3 英里, 25 英里, 50 英里等
    3. <餐馆> 为类别,也可以是酒店等
    35 replies  •  2017-01-09 09:54:10 +08:00
    drroot
    drroot
    OP
    Jan 8, 2017
    1
    mongoDB?
    Wangxf
    Wangxf
    Jan 8, 2017
    2
    不知道为啥这么多人推荐 mongo ?仅仅因为是 js 近亲?要说成本的话大学基本是都学过数据库啊,我记得我们学的还是 mssql 。。转换成 mysql 应该也没那么麻烦吧。。
    ericls
    ericls
    Jan 8, 2017 via iPhone
    3
    Postgres 做这个也很方便
    shiny
    shiny
    Jan 8, 2017 via iPhone
    4
    距离是可以换算的,没那么麻烦吧
    beginor
    beginor
    Jan 8, 2017 via Android❤️1
    5
    数据量大而且查询频繁的话,建议使用空间数据类型,前提是要有经纬度,建立空间索引,非常适合楼主这种空间查询。

    主流的关系数据库都支持空间索引, MongoDB 貌似只支持 GeoRSS , 不知道是否支持空间索引。
    Return2legacy
    Return2legacy
    Jan 8, 2017 via Android
    6
    mysql 5.7 以上
    aijam
    aijam
    Jan 8, 2017
    7
    ElasticSearch
    srlp
    srlp
    Jan 8, 2017
    8
    能装在内存的话(既然你有频繁查询), http://cristian.regolo.cc/2015/07/07/introducing-the-geo-api-in-redis.html


    mongodb 不太适合。
    loading
    loading
    Jan 8, 2017 via Android
    9
    数据库主要功能不是运算!
    zeayes
    zeayes
    Jan 8, 2017
    10
    @srlp redis 功能有限,支持不了类别。 PG+GIS
    cstj0505
    cstj0505
    Jan 8, 2017 via iPhone
    11
    绝对是 postgresql 啊,速度快,原生支持点的数据类型,还提供相应函数, postgis 支持地理位置的处理。专业的都用这个
    skydiver
    skydiver
    Jan 8, 2017 via iPad
    12
    支持 gis 最好的就是 pg 了吧
    k9982874
    k9982874
    Jan 8, 2017 via iPad
    13
    mongod 和 redis 都有 geo api
    mko0okmko0
    mko0okmko0
    Jan 8, 2017
    14
    任意直线距离,大部分常规资料库都一样快阿.
    还以为是在问以道路为准的.

    如果是在一个路网内.依照交通和道路状况.计算出两点之间最短交通路径.这个才是比较需要考虑图论资料库或是有特殊要化的.
    cstj0505
    cstj0505
    Jan 8, 2017 via iPhone
    15
    @mko0okmko0 你说的这些也不需要图数据库, postgresql+postgis 完全满足要求,还提供对应的函数和索引。
    F281M6Dh8DXpD1g2
    F281M6Dh8DXpD1g2
    Jan 8, 2017
    16
    postgis +1
    jedyu
    jedyu
    Jan 8, 2017
    17
    postgis 不二选择
    lights
    lights
    Jan 8, 2017
    18
    我记得 mongoDB 自带地图查询功能吧
    特地找了一下官网的说明,你看一下就好了
    https://docs.mongodb.com/manual/core/2dsphere/
    blacklee
    blacklee
    Jan 8, 2017
    19
    Postgres 。

    我刚刚把一个用了两年多, 5500W+数据量的系统,从 MySQL 导入到 Postgres 。
    Warder
    Warder
    Jan 8, 2017 via Android
    20
    做 gis 相关数据的应该都知道 postgres
    xjp
    xjp
    Jan 8, 2017 via iPhone
    21
    @Wangxf mysql 还不支持地理位置查询
    xjp
    xjp
    Jan 8, 2017 via iPhone
    22
    mongodb 和 redis 都支持地理位置查询 之前项目我们用 mongodb 的
    fasling
    fasling
    Jan 8, 2017 via Android
    23
    可以直接用 PostgreSQL ,如果仅仅是这么一个需求的话可以参考地图分图幅的办法给每个餐馆和邮编分配一个网格号码,根据网格就可以直接遍历。这在空间数据处理里很常见。
    BobbyLu
    BobbyLu
    Jan 8, 2017
    24
    PostgreSQL 似乎对地理位置数据有特殊的优化
    hao123yinlong
    hao123yinlong
    Jan 8, 2017
    25
    推荐 PostgreSQL ,千万用户,地理位置存储目前使用的 Mongo ,准备切 PG
    fivesmallq
    fivesmallq
    Jan 8, 2017 via iPhone
    26
    推荐 ElasticSearch ,之前用 mongo 性能太差
    TangMonk
    TangMonk
    Jan 8, 2017 via Android
    27
    redis 处理比 postgis 还方便
    Miy4mori
    Miy4mori
    Jan 8, 2017 via Android
    28
    不建议用 mongo db ,因为丫的不支持 ACID ,推荐 PostGis
    neoblackcap
    neoblackcap
    Jan 8, 2017
    29
    @shiny 应用层目前的换算成本高罢了,毕竟地球是一个球体,地表两点的距离不是直线
    billlee
    billlee
    Jan 8, 2017
    30
    @Miy4mori 搜索业务要毛线 ACID
    shiny
    shiny
    Jan 8, 2017
    31
    @neoblackcap 看精度要求,精度不高可以 GeoHash ,索引做的恰当还是挺快的。
    ETiV
    ETiV
    Jan 9, 2017
    32
    调百度、高德的 API 不行么,自己整不明白还非得自己做。。。?
    Miy4mori
    Miy4mori
    Jan 9, 2017 via Android
    33
    @billlee 不但没有 ACID ,性能也差,虽然是搜索业务,有两者都兼顾的为什么不用呢?
    Sharuru
    Sharuru
    Jan 9, 2017 via Android
    34
    如果楼主是类似生活 POI 兴趣点搜索的话,调地图 API 最快最容易。

    如果涉及到自有 LBS , GIS 的话,还是推荐 PostgreSQL ,专业做这个。

    毕竟,谁都不知道未来需求,稍微“未雨绸缪”下也是值得考虑的。

    (不过,同样也得考虑学习成本,看回复不同数据库的选择和技术栈也有关系
    Nitromethane
    Nitromethane
    Jan 9, 2017
    35
    这种场景更考验的是如何设置缓存
    推荐使用 redis 与传统结构性数据库配合
    否则高并发场景下,仅仅凭数据库性能是远远不够的,除非你单机性能特别强特别强特别强
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1122 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 70ms · UTC 18:28 · PVG 02:28 · LAX 10:28 · JFK 13:28
    ♥ Do have faith in what you're doing.