我一直在调查一个图形数据库,我找到了neo4j,虽然这看起来很理想,但我也遇到了Mongodb。
Mongodb不是官方的图形数据库,但我想知道它是否可以用于我的场景。
我正在编写一个应用程序,用户可以拥有朋友,而这些朋友可以拥有朋友等,这是社交网络的典型社交部分。
我想知道Mongodb是否足够。实现起来有多容易,或者我真的需要关注REAL图数据库吗?
我注意到foursquare正在使用Mongodb,所以我认为它支持他们的基础设施。
但是,例如,找到朋友的朋友也有多么容易,他们也有朋友的共同点?答案 0 :(得分:6)
虽然这不可能,但MongoDB不适合这种情况。
原因是MongoDB不执行JOIN。当您需要跨多个文档的查询时,您需要为每个文档单独查询。
在您的示例中,每个user
文档都有一个包含其朋友_id
个数组的数组。要找到“也是UserB的朋友的UserA朋友的所有朋友”将意味着你会:
这是您必须执行的三个查询。在每个查询之间,必须将结果集发送到应用程序,应用程序必须制定新查询并将其发送回数据库。从第二个查询返回的结果集可能非常大,这意味着第三个查询可能需要一段时间。
tl; dr:使用适合该作业的工具。如果您的数据是基于图形的,并且您希望对其进行基于图形的查询,请使用图形数据库。
答案 1 :(得分:1)
您可能想要一个实际的图形数据库而不是MongoDB。尝试使用TinkerPop图形技术堆栈开始使用。使用蓝图(类似于图形的JDBC),您可以将MongoDB的性能看作图形(使用Blueprints MongoDB implementation)与Neo4j,Titan或任意数量的其他图形{{ 3}}