我应该使用MongoDB还是Neo4j
我想将多用户提要阅读器从MySQL迁移到NoSQL数据库,但我无法决定MongoDB还是Neo4j更适合应用程序 这是当前数据库架构: 该应用程序具有以下用例: 用户:我应该使用MongoDB还是Neo4j,mongodb,neo4j,Mongodb,Neo4j,我想将多用户提要阅读器从MySQL迁移到NoSQL数据库,但我无法决定MongoDB还是Neo4j更适合应用程序 这是当前数据库架构: 该应用程序具有以下用例: 用户: 添加/删除/激活用户 订阅: 添加订阅(订阅的标题应由用户编辑) 删除一个用户的订阅(当没有其他用户订阅时,删除订阅源) 列出用户的所有子说明(应显示未读条目的计数) 参赛作品: 列出用户的所有条目(必须可通过提要、书签标志和读取标志进行过滤) 获取单个条目(将自动标记为已读) 书签: 为条目添加书签 删除书签
- 添加/删除/激活用户
- 添加订阅(订阅的标题应由用户编辑)
- 删除一个用户的订阅(当没有其他用户订阅时,删除订阅源)
- 列出用户的所有子说明(应显示未读条目的计数)
- 列出用户的所有条目(必须可通过提要、书签标志和读取标志进行过滤)
- 获取单个条目(将自动标记为已读)
- 为条目添加书签
- 删除书签
更新:Neo4j的优点是我能够将它嵌入到我的Java应用程序中。我使用SpringDataNeo4j/MongoDB和QueryDSL作为数据访问层。据我所知,SpringDataMongoDB会自动将所有关联(@DbRef)映射到一个文档中,这可能会导致非常巨大的开销,因为条目数量会不断增加。另一方面,我可以使用此处所述的手动参考:免责声明:由于我为Neo4j工作,我的观点可能有偏见 有一个记录良好的活动流图模型,称为“graphity”。这是示例(似乎链接暂时关闭,请使用)。它也在中引用
这个模型看起来非常接近您所需要的,但是可能需要进行一些更改。但这绝对是一个很好的起点。这是一个非常主观的问题;在这里,如果不知道应用程序的查询模式是什么,就很难给出可靠的建议。您在这里给出的一些更简单的用例,比如只添加一两个新对象,您选择哪一个可能没有多大区别 根据你提供给我们的有限信息,似乎两者都可以——但如果我有更多关于你情况的信息,我可能会有不同的感觉
出于这个原因,我将提供mongo非常弱的建议——neo4j真正做得很好的关键之一是路径关联查询(想想“朋友的朋友”式查询)。这是一个让竞争白热化的领域,我认为neo4j提供的那种或其他特殊酱汁没有迫切的需求。这并不是说neo4j不能做到(它完全可以做到),只是因为您的应用程序看起来不像是在其特定的优势领域使用neo4j,而不是在替代方案中使用neo4j。您需要对其进行建模,以查看它是否符合您的技术要求。在MongoDb的网站上有很多学习MongoDb建模的好材料。重要的是要认识到,您应该关注设计早期需要运行的查询,因为它会对MongoDb模型产生巨大影响。因为您的关系模型已经有2个联接表,而且您的用例似乎也在管理从这些提要收集的关系和条目,图形数据库可能比文档数据库做得更好。您可以尝试OrientDB。