Neo4j与MongoDB在空间搜索方面的比较

11

我准备开始一个项目,建立一个餐厅推荐引擎。我一直在犹豫要用Neo4j(图数据库)还是MongoDB(文档数据库)。我的节点/文档将是像餐厅和人这样的东西。我知道我会想要一些边缘关系,比如人->喜欢->餐厅,或者人->在餐厅吃过->餐厅。然而,我的主要查询将是查找距离位置Y X 英里以内的餐厅。

如果我有20家餐厅在距离Y X 英里范围内,但它们之间没有任何边缘关系,Neo4j如何处理空间查询呢?我知道在MongoDB中,我可以对纬度/经度进行索引,并查询所有类型的餐厅。在一个断开的图形中,Neo4j是否提供相同的功能?

对于像“我的朋友最常去哪些餐馆?”这样的问题,Neo4j(图数据库)是最佳选择吗?还是MongoDB(文档数据库)也能提供类似的功能?

4个回答

11
Neo4j Spatial引入了空间RTree(或其他方法)索引,该索引是图形本身的一部分。这意味着,即使是不连通的域实体,如果您对它们进行索引(也就是说,关系将连接空间索引和餐厅),它们也可以通过空间搜索找到。此外,这是足够灵活的,以便您可以将RTree中的原始BBox搜索与其他内容结合使用,例如在同一操作中检查餐馆类别,因为您可以在图的不同部分之间轻松跳转。
通过这种方式,Neo4j Spatial支持您期望从完整拓扑中获得的所有搜索功能,例如组合搜索以及带有空洞多边形的搜索等。
请注意,Neo4j Spatial处于0.7版,因此请谨慎,并在http://groups.google.com/group/neo4j/about上提问 :)

7

我对Neo4J Spatial不是很熟悉,但似乎MongoDB至少是一个很好的选择,因为它正是Foursquare所使用的数据库,用于实现您所描述的目的。MongoDB地理位置索引非常快速,并且可扩展性良好。


没错,不用再找了。MongoDB非常适合您的需求。现在只需将它与Node.JS结合使用,您就拥有了一个超快速且可扩展的解决方案。 - psousa
谢谢大家 - 我现在计划为这个解决方案实施MongoDB,这也是我最初想要的,因为它具有空间索引和众多API。 - drizkol

1

另一个可能的解决方案是使用CouchBase。它也使用文档模型,但对于查询需要更熟悉MapReduce。它现在比MongoDB具有更好的空间能力,但随着时间的推移可能会发生变化。

除了建议之外,我同意你给出的两个选择中Mongo将适合你的需求,并且可能更适合你的空间查询。


0

Neo4j的地理空间功能在扩展性方面表现不佳。我在neo4j中创建了一个地理空间层,并向其添加节点。当节点数超过10,000个时,即使使用neo4j2.0,在向该层添加节点时速度也会变得非常缓慢。

另一方面,MongoDB的地理位置功能运行相对较快且可扩展性更强。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接