MongoDb:用作图形数据库来查找"朋友"的"朋友"?

Mar*_*tin 6 mongodb graph-databases

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

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

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

我想知道我的情况可以mongodb足够吗?

实现起来有多容易,或者我真的需要专注于REAL图形数据库.

我注意到foursquare正在使用mongodb所以我认为它支持那里的基础设施.

但是,找到朋友中也有朋友的所有朋友是多么容易 - 例如

任何帮助真的很感激.

Phi*_*ipp 6

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

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

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

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

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

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