如何使用NoSQL大规模运行地理空间查询?

时间:2014-06-09 13:18:48

标签: cassandra geospatial couchbase nosql

我正在准备构建一个Android / iOS应用程序,它需要我制作复杂的多边形和包含地理空间查询。我喜欢Apache Cassandra没有单点故障,容错和数据中心意识。 Cassandra没有直接支持地理空间查询(我知道),但是MongoDB和Couchbase Server都支持。 MongoDB存在扩展问题,我不确定Couchbase是否会比使用Solr或Elasticsearch的Cassandra更好。

通过Couchbase Server上的Datastax Enterprise(DSE),Cassandra和Elasticsearch,我会犯错吗?使用Cassandra / ES后端与Couchbase的网页加载时间是否会有显着差异?

4 个答案:

答案 0 :(得分:4)

Aerospike刚刚发布了Server Community Edition 3.7.0,其中包含地理空间索引作为功能。

Aerospike现在可以存储GeoJSON对象并执行各种查询,允许应用程序跟踪快速变化的地理空间对象,或者只是询问“我附近有什么”的问题。在内部,我们使用Google的S2库和Geo Hashing对这些点和区域进行编码和索引。支持以下类型的查询:

  • 区域内的点数
  • 半径内的点数
  • 点位于
  • 的区域

这可以与用户定义函数(UDF)结合使用以过滤结果 - 即,进一步细化结果,仅包括您附近的酒吧,餐馆或宗教场所 - 即使是当前开放或有空房的。此外,例如,在区域中找到一个点允许广告商确定移动用户所在的活动区域 - 因此放置地理空间定向广告。在内部,使用相同的存储机制,可以对地理空间数据或记录中保存的其他数据进行高度并发的读写操作。地理空间数据非常有趣,因此我们提供了一组基于Open Street Map和Yelp Dataset Challenge数据的示例。

地理空间是3.7.0版本中的实验性功能。它旨在让开发人员尝试并提供反馈。我们认为API很好,但在实验性功能中,基于社区的反馈,Aerospike可能会选择在此功能为GA时修改这些API。它目前不适合生产使用(虽然我们知道一些开发人员将直接进入生产......)

答案 1 :(得分:3)

Aerospike提供经过验证的高度可扩展的NoSQL解决方案。最近添加了地理空间查询,早期采用者版本刚刚发布announced。你可能想检查一下。

答案 2 :(得分:1)

Redis可能是最好的选择之一。目前您需要使用Redis Unstable 3.2。表现是出色的。我一直在使用这个生菜java客户端,并看到了令人难以置信的结果。半径越大,性能越差。

http://redis.io/commands/geohash

答案 3 :(得分:0)

正如已经指出的那样,你问了很多问题。提供的链接为使用Cassandra如何实现通用地理空间操作提供了一个潜在的答案。我将使用直接开箱即用的Cassandra构造提供一个可能的答案。

  1. 使用geohashes(或quad trees)或类似内容,创建地理数据及其关联多边形的索引。具体的关系和精度等级取决于您的数据集和用例。

  2. 要确定哪些多边形与给定点或多边形相交,请首先计算其地理位置,然后在索引中查找这些地理位置。对于一般接近度,这可能就足够了。无论哪种方式,这都会将潜在的交叉点缩小到可管理的范围。