【问题标题】:neo4j vs mongodb for spatial search用于空间搜索的 neo4j 与 mongodb
【发布时间】:2012-03-25 04:54:50
【问题描述】:

我正准备开始一个项目,我将在该项目中为餐馆构建推荐引擎。我一直在 neo4j (graph db) 和 mongodb (document db) 之间徘徊。我的节点/文件将是餐厅和人之类的东西。我知道我会想要一些优势,比如 person->likes->restaurant 或 person->ate_at->restaurant。然而,我的主要查询是在位置 Y 的 X 英里范围内找到餐馆。

如果我在 Y 的 X 英里内有 20 家餐厅,但没有通过任何边连接,neo4j 将如何处理空间查询?我知道使用 mongodb 我可以索引 lat/long 并查询所有餐厅类型。 neo4j 是否在断开连接的图中提供相同的功能?

在回答诸如“我的朋友最常吃哪些餐厅?”之类的问题时,neo4j (graph db) 是否合适?或者 mongodb (document db) 会为我提供类似的功能吗?

【问题讨论】:

    标签: mongodb spatial neo4j


    【解决方案1】:

    我对 Neo4J Spatial 不太熟悉,但似乎 MongoDB 至少很合适,因为它是 Foursquare 使用的数据库,正是您所描述的目的。 MongoDB 地理索引非常快,并且可以很好地扩展。

    【讨论】:

    • 同意,别再看了。 MongoDB 非常适合您的要求。现在只需将它与 Node.JS 混合,您就有了一个超快速且可扩展的解决方案
    • 谢谢大家 - 我现在计划为这个解决方案实现 mongodb,这是我最初想做的,因为空间索引和众多 API。
    【解决方案2】:

    Neo4j Spatial 引入了 Spatial RTree(或其他方式)索引,它是图形本身的一部分。这意味着,如果您对它们进行索引,即使是断开连接的域实体也将通过空间搜索找到(即关系会将空间索引连接到餐厅)。此外,这非常灵活,您可以将 RTree 中的 Raw BBox 搜索与其他事情结合起来,例如同时检查餐馆类别,因为您可以跳出并进入图表的不同部分。

    通过这种方式,neo4j Spatial 支持您期望形成完整拓扑的所有搜索功能,例如组合搜索和对带孔的多边形的搜索等。

    请注意,Neo4j Spatial 是 0.7,所以请温柔地询问http://groups.google.com/group/neo4j/about :)

    【讨论】:

      【解决方案3】:

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

      抛开建议不谈,我同意在您给 Mongo 的两个选择中,Mongo 可以很好地满足您的需求,并且可能更适合您的空间查询。

      【讨论】:

        【解决方案4】:

        Neo4j 地理空间的扩展并没有那么好。我在 neo4j 中创建了一个地理空间层,并向该层添加了节点。超过 10,000 个节点时,即使使用 neo4j2.0,向层添加节点也会变得非常缓慢

        另一方面,mongodb 地理位置的运行速度相对要快得多,并且更具可扩展性。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-06-02
          相关资源
          最近更新 更多