【问题标题】:Is modeling relationships in MongoDB using an ODM (Ming) an Anti-Pattern?使用 ODM (Ming) 在 MongoDB 中建模关系是一种反模式吗?
【发布时间】:2014-08-21 00:12:58
【问题描述】:

我有兴趣使用 Ming 为我的 100+ GB 数据集建模,该数据集主要是非关系数据(在实验室中测量的信号)和 MongoDB 中的一些“关系”元数据(例如实验名称)。这不是我是否应该使用 NoSql 数据库的问题。

如果使用 ODM(例如 Ming's version here)对关系进行建模是一种有效的设计模式,那么为什么没有其他流行的 ODM 提供该功能?我在以下任何一项中都没有看到它:

-Mongoose (MongoDB)

-cqlengine (Cassandra)

-赫克托(卡桑德拉)

-学说(CouchDB)

【问题讨论】:

    标签: mongodb odm ming nosql


    【解决方案1】:

    在 NoSQL 数据存储中建模关系绝对是有效的,但如果您拥有高度相关的数据,您可能需要重新考虑您选择的数据存储和架构设计是否符合您的用例目标。

    在 MongoDB 中,一个常见的决定(基于您的用例)是通过在同一集合中嵌入相关数据或使用参考链接来建模关系是否更合适em> 到另一个集合中的文档(参见:MongoDB 手册中的 Data Model Design)。

    外键关系通常不会通过分布式 NoSQL 数据库的服务器端支持来填充或强制执行,因此 ODM 中的声明性引用通常会转换为服务器上的多个查询。多个查询不一定是坏事(尽管可能有写得很糟糕的极端情况),使用引用的应用程序级数据连接可能非常方便。

    特别是对于 MongoDB,Database References (DBRefs) 有一个 BSON 字段类型。目前(在 MongoDB 2.6 中)不支持 DBRefs 的服务器端扩展,但是许多驱动程序和 ODM 提供了方便的方法来跟踪和填充此标准表示法中的引用。

    您可以在您提到的一些 ODM 中看到这一点:

    • Mongoose 支持 population 来自其他集合的文档
    • Doctrine ODM 支持references 映射关系到其他类/集合

    通常,ODM 提供自动填充引用或惰性填充(即根据需要或在代码中访问)的选择。

    我不熟悉 Cassandra 库,但在文档中没有看到任何明显提及引用或关系的内容。我会假设关系特征的存在(或不存在)更多是 ODM 的作者的选择,而不是特定的模式/反模式。

    【讨论】:

    • 我的主要收获是 NoSQL 数据库使用引用、填充、嵌入和链接到模型关系的概念。令我惊讶的是,我查看的任何其他 SO 问题或博客文章中都没有记录这一点。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2020-01-06
    • 2012-08-04
    • 1970-01-01
    • 2020-06-22
    • 2014-02-21
    • 2023-03-10
    • 1970-01-01
    • 2016-06-25
    相关资源
    最近更新 更多