[英]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朋友的所有朋友”,意味着你会:
这些是您必须执行的三个查询。 在每个查询之间,必须将结果集发送到应用程序,应用程序必须制定新查询并将其发送回数据库。 从第二个查询返回的结果集可能非常大,这意味着第三个查询可能需要一段时间。
tl; dr:使用正确的工具完成工作。 如果您的数据是基于图形的,并且您希望对其执行基于图形的查询,请使用图形数据库。
您可能想要一个实际的图形数据库而不是MongoDB。 尝试使用TinkerPop图形技术堆栈开始。 使用Blueprints(类似于JDBC的图形),您可以将MongoDB的性能看作图形(使用Blueprints MongoDB实现 )与Neo4j , Titan或任何其他图形实现 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.