6

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

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

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

我想知道在我的情况下 Mongodb 是否足够。实现起来有多容易,或者我真的需要专注于真正的图形数据库吗?

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

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

4

2 回答 2

6

尽管这并非不可能,但 MongoDB 并不适合这种情况。

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

在您的示例中,每个文档都有一个包含他们朋友user的数组。_id要找到“用户 A 的朋友的所有朋友同时也是用户 B 的朋友”意味着您将:

  1. 找到 userA 并获取他的朋友数组
  2. 找到该数组中的所有用户并获取他们的朋友数组
  3. 查找这些数组中所有在好友数组中有 UserB 的用户

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

tl;dr:为工作使用正确的工具。当您的数据是基于图形的并且您想要对其进行基于图形的查询时,请使用图形数据库。

于 2013-09-19T12:49:59.000 回答
1

您可能想要一个实际的图形数据库,而不是 MongoDB。尝试使用TinkerPop图形技术堆栈开始。使用 Blueprints(类似于用于图形的 JDBC),您可以看到 MongoDB 作为图形(使用Blueprints MongoDB 实现)与Neo4jTitan或任何数量的其他图形实现相比的性能。

于 2013-09-19T13:38:28.093 回答