V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
tokki
V2EX  ›  问与答

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

  •  
  •   tokki · 2012-06-06 01:51:34 +08:00 · 3227 次点击
    这是一个创建于 4579 天前的主题,其中的信息可能已经有所发展或是发生改变。
    一个LBS约炮的东西, 你的位置坐标为 XY 你要找在你附近的1000米内的人
    那么就是要查找所有坐标 在 X-1000 到X+1000 跟Y-1000 Y+1000的人

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

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

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

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

    WHERE 1000 < X < 2000 AND 1300 < Y < 2300
    ling0322
        3
    ling0322  
       2012-06-06 02:42:47 +08:00
    我的建议是(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  
       2012-06-06 03:30:11 +08:00
    用NoSQL的话,看这篇文章第6条 http://coolshell.cn/articles/7270.html
    Geohash技术,具体我也没搞过
    tokki
        5
    tokki  
    OP
       2012-06-06 09:34:33 +08:00
    @Livid
    @catfan
    @ling0322
    @coldear
    谢谢你们
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3293 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 12:06 · PVG 20:06 · LAX 04:06 · JFK 07:06
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.