4

目前,在一个部署的应用程序中,我们所有的内容实体都存储在 MongoDB 中,我们正在使用内置的 MongogeoNear命令来收集在给定半径内具有latlon属性的所有实体。然后将该数据集输入并行搜索模块并根据用户的查询进行过滤。性能足以满足应用程序迄今为止的流量水平。

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

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

该方法存在一些问题,据我所知 10gen 目前正在解决。

按距离以外的其他方式对 MongoDB GeoNear 结果进行排序?

MongoDB 中的 geoNear 可以返回文档中的字段子集吗?

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

随着开发团队的壮大,有问题的客户正在考虑对该功能的数据架构进行改造,以使新开发人员的代码更加直观。在解释完所有内容后,他们对更改范围查询的方法很感兴趣,因为他们对将 Mongo 中的这个相对较新的功能作为我们架构中的核心组件犹豫不决(因为它获得了所有其他过滤器所依赖的第一组有限的数据)应用)

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

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

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

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

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

4

1 回答 1

0

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

Neo4J 包含 JTS,所以我很确定您可以将它用于出色的空间功能。

如果您的数据存储是用 C/C++ 编写的,那么寻找 Geos 集成 对于 Java,您需要 JTS

于 2013-03-04T07:03:57.700 回答