使用ODM(明)和反模式在MongoDB中建模关系?

时间:2014-06-30 15:06:59

标签: mongodb odm ming nosql

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

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

-Mongoose(MongoDB)

-cqlengine(Cassandra)

-Hector(Cassandra)

-doctrine(CouchDB)

1 个答案:

答案 0 :(得分:3)

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

在MongoDB中,一个常见的决定(基于您的用例)是通过在相同集合中嵌入相关数据或使用引用链接来建模关系可能更合适到另一个集合中的文档(请参阅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作者的选择,而不是特定模式/反模式。