tokki
V2EX  ›  问与答

以前没怎么写过后端的东西 最近打算搞点东西玩玩,开始自己写后端,各种坑啊,先问个数据库的问题。。。

  •  
  •   tokki · Jun 6, 2012 · 3707 views
    This topic created in 5112 days ago, the information mentioned may be changed or developed.
    一个LBS约炮的东西, 你的位置坐标为 XY 你要找在你附近的1000米内的人
    那么就是要查找所有坐标 在 X-1000 到X+1000 跟Y-1000 Y+1000的人

    这种情况 如果应该怎么去设计表啊-。-

    如果高访问量 应该如何去做呢

    还有据说REDIS这种东西 很高级很强大 能否对这种场景起到帮助呢

    谢谢啦
    5 replies    1970-01-01 08:00:00 +08:00
    Livid
        1
    Livid  
    MOD
    PRO
       Jun 6, 2012
    4sq 的这类数据是用 MongoDB 来存储和提供服务的。你可以 Google 一下 MongoDB Geo。
    catfan
        2
    catfan  
       Jun 6, 2012
    XY的值分开保存,查询的时候按条件筛选便可以。

    WHERE 1000 < X < 2000 AND 1300 < Y < 2300
    ling0322
        3
    ling0322  
       Jun 6, 2012
    我的建议是(X区域号,Y区域号,X,Y)这样建。其中对(X区域号,Y区域号)建一个联合的索引。区域号的意思就是, 每隔1000米编号-> 0~999:0#; 1000~1999:1#; 2000~2999:3#...

    然后查找的时候根据你所处在的地点(X,Y)算出(X区域号,Y区域号)寻找到你所在的相关的区域(以及邻近的8个区域,因为有索引所以可以在O(1)时间中取得),再和这个区域中的人比较X和Y,最终得出人数。
    coldear
        4
    coldear  
       Jun 6, 2012
    用NoSQL的话,看这篇文章第6条 http://coolshell.cn/articles/7270.html
    Geohash技术,具体我也没搞过
    tokki
        5
    tokki  
    OP
       Jun 6, 2012
    @Livid
    @catfan
    @ling0322
    @coldear
    谢谢你们
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2743 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 38ms · UTC 15:02 · PVG 23:02 · LAX 08:02 · JFK 11:02
    ♥ Do have faith in what you're doing.