繁体   English   中英

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

[英]Using as a graph database for finding “friends” of “friends” in MongoDb

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

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

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

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

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

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

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

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

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

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

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

tl; dr:使用正确的工具完成工作。 如果您的数据是基于图形的,并且您希望对其执行基于图形的查询,请使用图形数据库。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM