我应该使用MongoDB还是Neo4j

时间:2014-01-03 07:30:14

标签: mongodb neo4j

我想将多用户提要阅读器从MySQL迁移到NoSQL数据库,但我无法确定MongoDB或Neo4j是否更适合应用程序。

这是当前的数据库架构: Current database schema

该应用程序具有以下用例:

用户:

  • 添加/删除/激活用户

订阅:

  • 添加订阅(订阅的标题应由用户编辑)
  • 删除一个用户的订阅(以及没有其他用户订阅时的Feed)
  • 列出用户的所有子描述(应显示未读条目的数量)

条目:

  • 列出用户的所有条目(必须可以通过Feed,书签标记和读取标记过滤)
  • 获得一个条目(将自动标记为已读)

书签:

  • 为条目添加书签
  • 删除书签

您建议使用哪个数据库?我的直觉是MongoDB,因为我没有“高度互联”的数据,但我在迁移user_entries表时遇到了问题。也许你有一些提示如何建模与MongoDB的关系?

更新:Neo4j的优势在于我能够将它嵌入到我的Java应用程序中。我使用Spring Data Neo4j / MongoDB和QueryDSL作为数据访问层。据我所知,Spring Data MongoDB会自动将所有关联(@DbRef)映射到一个文档中,并且随着条目数量的增加,这可能会导致非常大的开销。另一方面,我可以使用此处所述的手动引用:http://docs.mongodb.org/manual/reference/database-references/

2 个答案:

答案 0 :(得分:4)

免责声明:因为我在为Neo4j工作,所以我的观点可能有偏见。

有一个记录良好的活动流图形模型称为“图形”。它是examplained here(似乎链接暂时关闭,使用variant from web.archive)。它也在Neo4j manual中引用。

此模型看起来非常接近您的需求,但可能需要进行一些更改。但这绝对是一个很好的起点。

答案 1 :(得分:2)

这是一个非常主观的问题;在不知道应用程序的查询模式是什么的情况下,很难在这里提供良好的可靠建议。您在这里给出的一些更简单的用例就像添加一两个新对象一样,它可能会让您选择哪一个产生很大的不同。

根据您提供给我们的有限信息,似乎要么做得很好 - 但如果我有更多关于您情况的信息,我可能会有不一样的感受。

我会提出mo​​ngo非常弱的建议,因为这个原因 - neo4j真正做的关键事情之一就是路径关联查询(想想"朋友的朋友"风格查询)。这是一个吹嘘竞争的领域,我不会看到对neo4j提供的那种或其他特殊酱汁的迫切需求。这并不是说neo4j不能这样做(它完全可以)只是你的应用程序看起来不像在其特定的强度区域中使用neo4j而不是替代方案。