2012-04-29 110 views
3

我们的团队目前正在研究一些我们害怕“爆炸”的杀手ios定位应用,因此我们想要考虑可扩展性和可用性。NoSQL中的地理查询

后,我们读到画东西是基于NoSQL的couchbase,我们扫描的沙发底座API(特别是.NET的一个),并发现我们所有的应用需求的解决方案,除了一个,而我们描述的情景:

  1. 假设我们在世界各地拥有1,000,000名用户,其位置由经度和纬度指定;
  2. 我们有一个用户圈范围c:它的位置(由经度和纬度指定)和半径rc我们想要有效地确定哪些用户在圈子中。

如果我们把它写在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版本的一个特性(预定在今年晚些时候发布)作为试验,并将在后续版本中完全支持。为它构建必要的客户端界面,但目前没有任何可用的功能。最后,距离和边界圈(等等)是随着我们前进而发展的特征。“

+0

有关Couchbase的更多信息,请访问Couchbase论坛:http://www.couchbase.com/forums/thread/question-regarding-geographic-queries – vmx

回答

3

我不知道如何使用couchbase,但MongoDB具有地理空间索引。

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

编辑看起来像沙发具有地理空间,以及通过GeoCouch。 http://www.couchbase.com/docs/couchbase-geocouch-guide/

+0

谢谢! 我甚至在MongoDB C#驱动程序中发现了一个地理空间示例: http://stackoverflow.com/questions/6993249/mongodb-geospatial-index-in-c-sharp 但是我仍然不知道是否沙发GeoSpatial通过Couchbase客户端库支持:.NET(C#)1.2 o_o – ozba

+0

尚未支持Couchbase地理空间索引,但计划为。 请参阅我的问题编辑。 – ozba

+0

从沙发转移到Mongo并不是什么大转变,他们都是文档商店。他们有他们自己的怪癖,但是比MySql和Couch更容易。 – taylonr