MongoDB的GeoNear的替代品

时间:2012-07-12 15:45:18

标签: mongodb geospatial

目前,在我们所有内容实体都存储在MongoDB中的已部署应用程序中,我们使用内置的Mongo geoNear命令来收集所有lat和{{1}的实体给定半径内的属性。然后将该数据集馈送到并行化搜索模块中,并根据用户的查询进行过滤。对于应用程序迄今为止的流量水平,性能足够强大。

使用的真正基本方法正是10gen在Mongo网站上的含义:

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

这种方法有一些问题,我理解10gen目前正在研究中。

Sorting MongoDB GeoNear results by something other than distance?

Can geoNear in MongoDB return a subset of fields in a document?

https://jira.mongodb.org/browse/SERVER-1982

随着开发团队的发展,有问题的客户正在考虑对此功能的数据架构进行改造,以使新开发人员能够更直观地编写代码。在解释完所有内容之后,他们有兴趣改变远程查询的方法,因为他们对在Mongo中使用这个相对较新的特性犹豫不决这样的核心组件(因为它获得了第一个有限的数据集,所有其他过滤器都是施加)

我很好奇是否有任何强有力的选择。作为负责开发这部分逻辑的人,我可以想到一些,但我只能猜测他们的优点/缺点。谷歌搜索后,我想出了:

  1. 将对象本身存储在Mongo中,然后将ObjectIds与其支持空间索引的SQL服务器上的SQL表中的空间坐标相关联。我喜欢这种方法将所有空间数据放在一个索引中,但这里丰富的SQL人才倾向于MySQL,从文档来看,它的空间索引实现似乎是一个非常像mongo中的事后想法。此外,据我所知,我们将仅修复MyISAM表格。

  2. 就SQL专用空间解决方案来说,我可以在网上找到最多的文档是Postgres with PostGIS。目前,我们所做的只是使用hasrsign距离计算进行半径搜索,因此其中一个优点是支持使用向量和多边形进行更高级的限制,这可能使我们将来可以扩展到类似于区域的限制。这里的主要限制是我们根本没有内部的Postgres人才,我不确定这是否需要新员工。

  3. 查看对象本身的不同NoSQL解决方案,并将位置元数据嵌入其中。 Neo4j似乎在这个部门承诺了很多: http://www.oscon.com/oscon2011/public/schedule/detail/19822文档中肯定有一些令人信服的例子。

  4. 我很好奇是否存在任何将空间索引作为核心任务目标的键值存储解决方案?如果没有,那么对于良好的责任分离和最大可维护性,最推荐哪种方法?

1 个答案:

答案 0 :(得分:0)

最新版本的Postgresql(9.2)具有键值存储类型表,但我不确定您是否可以将其与PostGIS结合使用以获得真正强大的空间功能。

Neo4J包含JTS,因此我非常确定您可以使用它来实现出色的空间功能。

如果您的数据存储区是用C / C ++编写的,那么请查看Geos集成 对于Java,你想要JTS