我应该使用MongoDB还是Neo4j

我应该使用MongoDB还是Neo4j,mongodb,neo4j,Mongodb,Neo4j,我想将多用户提要阅读器从MySQL迁移到NoSQL数据库,但我无法决定MongoDB还是Neo4j更适合应用程序 这是当前数据库架构: 该应用程序具有以下用例: 用户: 添加/删除/激活用户 订阅: 添加订阅(订阅的标题应由用户编辑) 删除一个用户的订阅(当没有其他用户订阅时,删除订阅源) 列出用户的所有子说明(应显示未读条目的计数) 参赛作品: 列出用户的所有条目(必须可通过提要、书签标志和读取标志进行过滤) 获取单个条目(将自动标记为已读) 书签: 为条目添加书签 删除书签

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

这是当前数据库架构:

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

用户:

  • 添加/删除/激活用户
订阅:

  • 添加订阅(订阅的标题应由用户编辑)
  • 删除一个用户的订阅(当没有其他用户订阅时,删除订阅源)
  • 列出用户的所有子说明(应显示未读条目的计数)
参赛作品:

  • 列出用户的所有条目(必须可通过提要、书签标志和读取标志进行过滤)
  • 获取单个条目(将自动标记为已读)
书签:

  • 为条目添加书签
  • 删除书签
你会推荐哪个数据库?我的直觉是MongoDB,因为我没有“高度互联”的数据,但在迁移user_entries表时遇到了问题。也许你有一些如何与MongoDB建立这种关系的技巧


更新:Neo4j的优点是我能够将它嵌入到我的Java应用程序中。我使用SpringDataNeo4j/MongoDB和QueryDSL作为数据访问层。据我所知,SpringDataMongoDB会自动将所有关联(@DbRef)映射到一个文档中,这可能会导致非常巨大的开销,因为条目数量会不断增加。另一方面,我可以使用此处所述的手动参考:

免责声明:由于我为Neo4j工作,我的观点可能有偏见

有一个记录良好的活动流图模型,称为“graphity”。这是示例(似乎链接暂时关闭,请使用)。它也在中引用


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

这是一个非常主观的问题;在这里,如果不知道应用程序的查询模式是什么,就很难给出可靠的建议。您在这里给出的一些更简单的用例,比如只添加一两个新对象,您选择哪一个可能没有多大区别

根据你提供给我们的有限信息,似乎两者都可以——但如果我有更多关于你情况的信息,我可能会有不同的感觉


出于这个原因,我将提供mongo非常弱的建议——neo4j真正做得很好的关键之一是路径关联查询(想想“朋友的朋友”式查询)。这是一个让竞争白热化的领域,我认为neo4j提供的那种或其他特殊酱汁没有迫切的需求。这并不是说neo4j不能做到(它完全可以做到),只是因为您的应用程序看起来不像是在其特定的优势领域使用neo4j,而不是在替代方案中使用neo4j。

您需要对其进行建模,以查看它是否符合您的技术要求。在MongoDb的网站上有很多学习MongoDb建模的好材料。重要的是要认识到,您应该关注设计早期需要运行的查询,因为它会对MongoDb模型产生巨大影响。因为您的关系模型已经有2个联接表,而且您的用例似乎也在管理从这些提要收集的关系和条目,图形数据库可能比文档数据库做得更好。您可以尝试OrientDB。