用作图形数据库,用于在MongoDb中查找“朋友”的“朋友”

时间:2013-09-19 12:08:19

标签: mongodb graph-databases

我一直在调查一个图形数据库,我找到了neo4j,虽然这看起来很理想,但我也遇到了Mongodb。

Mongodb不是官方的图形数据库,但我想知道它是否可以用于我的场景。

我正在编写一个应用程序,用户可以拥有朋友,而这些朋友可以拥有朋友等,这是社交网络的典型社交部分。

我想知道Mongodb是否足够。实现起来有多容易,或者我真的需要关注REAL图数据库吗?

我注意到foursquare正在使用Mongodb,所以我认为它支持他们的基础设施。

但是,例如,找到朋友的朋友也有多么容易,他们也有朋友的共同点?

2 个答案:

答案 0 :(得分:6)

虽然这不可能,但MongoDB不适合这种情况。

原因是MongoDB不执行JOIN。当您需要跨多个文档的查询时,您需要为每个文档单独查询。

在您的示例中,每个user文档都有一个包含其朋友_id个数组的数组。要找到“也是UserB的朋友的UserA朋友的所有朋友”将意味着你会:

  1. 找到userA并获取他的friends-array
  2. 找到该阵列中的所有用户并获取他们的朋友阵列
  3. 查找这些数组中所有在其friends-array
  4. 中有UserB的用户

    这是您必须执行的三个查询。在每个查询之间,必须将结果集发送到应用程序,应用程序必须制定新查询并将其发送回数据库。从第二个查询返回的结果集可能非常大,这意味着第三个查询可能需要一段时间。

    tl; dr:使用适合该作业的工具。如果您的数据是基于图形的,并且您希望对其进行基于图形的查询,请使用图形数据库。

答案 1 :(得分:1)

您可能想要一个实际的图形数据库而不是MongoDB。尝试使用TinkerPop图形技术堆栈开始使用。使用蓝图(类似于图形的JDBC),您可以将MongoDB的性能看作图形(使用Blueprints MongoDB implementation)与Neo4jTitan或任意数量的其他图形{{ 3}}