Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb Mogodb模式设计:嵌入或引用_Mongodb - Fatal编程技术网

Mongodb Mogodb模式设计:嵌入或引用

Mongodb Mogodb模式设计:嵌入或引用,mongodb,Mongodb,我有一个关于设计我的应用程序模式的问题。我的应用程序处理对象以及这些对象的状态。 对象和状态是非常小的对象,就体积而言,它处理数百万个对象,每个对象可以有数百到上万个状态 应用程序的主要写入操作是每天为每个对象多次添加状态。 读取操作包括各种对象列表、对象详细信息、许多聚合框架查询,以获取有关对象和状态的统计信息 我尝试了这两种方法,它对数百个状态为1000-10000的OBEJCT非常有效,但无法确定哪个更具可扩展性 嵌入对象: 物体: [ { id:0000000001, 名称:资源1, 说

我有一个关于设计我的应用程序模式的问题。我的应用程序处理对象以及这些对象的状态。 对象和状态是非常小的对象,就体积而言,它处理数百万个对象,每个对象可以有数百到上万个状态

应用程序的主要写入操作是每天为每个对象多次添加状态。 读取操作包括各种对象列表、对象详细信息、许多聚合框架查询,以获取有关对象和状态的统计信息

我尝试了这两种方法,它对数百个状态为1000-10000的OBEJCT非常有效,但无法确定哪个更具可扩展性

嵌入对象:

物体: [ { id:0000000001, 名称:资源1, 说明:资源1, 所有者:约翰·多伊, 创建时间:2000-01-01T00:00:00.000Z, 更新时间:2000-01-01T00:00:00.000Z, 地位:[ { id:0000000001, 位置:[0,0], 评论:评论1, 所有者:约翰·多伊, 创建时间:2000-01-01T00:00:00.000Z, 更新时间:2000-01-01T00:00:00.000Z }, { id:0000000002, 位置:[0,0], 评论:评论2, 所有者:约翰·多伊, 创建时间:2000-01-01T00:00:00.000Z, 更新时间:2000-01-01T00:00:00.000Z } ] } ] 参考对象:

物体: [ { id:0000000001, 名称:资源1, 说明:资源1, 所有者:约翰·多伊, 创建时间:2000-01-01T00:00:00.000Z, 更新时间:2000-01-01T00:00:00.000Z, } ] 地位 [ { id:0000000001, 对象id:000000000 1, 位置:[0,0], 评论:评论1, 所有者:约翰·多伊, 创建时间:2000-01-01T00:00:00.000Z, 更新时间:2000-01-01T00:00:00.000Z }, { id:0000000002, 对象id:000000000 1, 位置:[0,0], 评论:评论2, 所有者:约翰·多伊, 创建时间:2000-01-01T00:00:00.000Z, 更新时间:2000-01-01T00:00:00.000Z } ] 致以最良好的祝愿

如果您希望获得最佳性能,并且您的单个文档更小,则最好使用Mickeel

嵌入式模型

当您需要最大的可伸缩性或一些复杂的关系时,最好在中引用模型

因此,如果您确定可以满足文档大小限制,则可以使用嵌入式模型。但是如果您想要有保证的可伸缩性,请使用referenced

以下是Mongo文档中的一些引用:

通常,在以下情况下使用嵌入式数据模型:

实体之间存在“包含”关系

实体之间存在一对多关系。在这些关系中,“多”文档或子文档总是与或一起出现 在“一个”或父文档的上下文中查看

提及

一般来说,嵌入为读取操作提供了更好的性能, 以及在数据库中请求和检索相关数据的能力 单一数据库操作。嵌入式数据模型使 在单个原子写入操作中更新相关数据

通常,使用规范化数据模型:

当嵌入会导致数据重复,但不会提供足够的读取性能优势来超过 重复的影响。 表示更复杂的多对多关系。 为大型分层数据集建模。 引用提供了比嵌入更大的灵活性。然而 客户端应用程序必须发出后续查询以解决问题 参考资料。换句话说,规范化数据模型可能需要更多 到服务器的往返

提及


第二种方法在您的情况下更好,你用谷歌搜索过这个吗?这是几周前提出的问题。没有定义的用例,这有点太宽泛了。但值得一提的是,如果您正在考虑嵌入超过1000个项目的数组,那么嵌入可能会导致比链接数据更大的性能问题。可能会通过提供的链接中的各种情况,并可能考虑混合解决方案,如所涵盖的。