NoSQL中的地理查询

时间:2012-04-29 22:41:16

标签: sql performance nosql latitude-longitude couchbase

我们的团队目前正在开发一些杀手ios定位应用程序,我们担心这会很好地“爆炸”,因此我们希望能够考虑可扩展性和可用性。

在我们读到基于couchbase NoSQL的绘图之后,我们扫描了沙发基础api(特别是.net one)并找到了除我们之外的所有应用程序需求的解决方案,并且我们描述了该场景:

  1. 假设我们在全球范围内拥有1,000,000名用户的订单,其位置由经度和纬度指定;
  2. 我们有一个用户圈子范围c:它的位置(由经度和纬度指定)和半径rc
  3. 我们希望有效地确定哪个用户在圈子中。
  4. 如果我们像现在一样在sql server中编写它,就像这样:

    CREATE TABLE UserLocations
    [UserId] [bigint] NOT NULL,
    [CurrentLocation] [geography] NOT NULL
    
    ALTER PROCEDURE sp_GetCurrentUsersInRange
    @userPoint geography, 
    @RangeInMeters int
    AS
    BEGIN
    
    select  UserId from UserLocations
    where @userPoint.STDistance(CurrentLocation) <= @RangeInMeters
    and UserId <> @userId
    
    END
    

    但这是NoSQL,只有键(例如经度键和纬度键),但我们无法获取所有值并在内存中查询它们 ,不是吗?

    所以问题是: 有没有办法让你知道如何在NoSQL中完成这样的事情?

    谢谢

    P.S。我们在Stackoverflow中的相关问题:How to determine n locations inside a circle efficiently?

    编辑: Couchbase的支持已经回答了我! 引用他们的答案:

    “我们的地理空间索引是一个在2.0中推出的功能(计划在今年晚些时候推出)作为实验,并将在稍后的版本中完全支持。我们也正在构建必要的客户端它的接口,但目前没有任何可用的东西。 最后,距离和边界圆(以及其他)是我们在前进过程中将要发展的特征。“

1 个答案:

答案 0 :(得分:3)

我不知道用couchbase做这件事,但MongoDB有地理空间索引。

http://www.mongodb.org/display/DOCS/Geospatial+Indexing

编辑通过GeoCouch看起来Couch也有GeoSpatial。 http://www.couchbase.com/docs/couchbase-geocouch-guide/