首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有集合集合的聚合集合

具有集合集合的聚合集合
EN

Stack Overflow用户
提问于 2014-01-16 12:38:24
回答 1查看 114关注 0票数 0

我有一些问题要选择的模式设计,我有一个文件,保存用户的信息,每个用户有一个非常大的一组项目,最多可达20k项。

一个项目有一个日期、一个id和19个其他字段,还有一个内部数组,它可以有20-30个项,可以修改、删除,当然也可以用它所拥有的任何属性来重新插入和查询。

所以我想出了两种可能的模式。

1.把每件事都放在一份文件中

代码语言:javascript
复制
    {_id:ObjectId("") type:'user' name:'xxx' items:[{.......,internalitems:[]},{.......,internalitems:[]},...]}
    {_id:ObjectId("") type:'user' name:'yyy' items:[{.......,internalitems:[]},{.......,internalitems:[]},...]}

2.将项目从用户中分离出来,让每个项目都有自己的文档。

代码语言:javascript
复制
    {_id:ObjectId(""), type:'user', username:'xxx'}
    {_id:ObjectId(""), type:'user', username:'yyy'}
    {_id:ObjectId(""), type:'useritem' username:'xxx' item:{.......,internalitems:[]}]}
    {_id:ObjectId(""), type:'useritem' username:'xxx' item:{.......,internalitems:[]}]}
    {_id:ObjectId(""), type:'useritem' username:'yyy' item:{.......,internalitems:[]}]}
    {_id:ObjectId(""), type:'useritem' username:'yyy' item:{.......,internalitems:[]}]}

正如我在前面解释过的,一个用户可以拥有数千项,我有几十个用户,内部项可以有20-30项,它有9个字段。

考虑到单个项可以由不同的用户查询,并且只能由所有者和另一个进程修改。

  • 如果性能真的很重要,你会选择哪种设计?
  • 如果你两个都不选,你能建议什么模式?

另外,我将切分,我有一个单一的集合,为一切。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-16 13:33:15

我不推荐第一种方法,最大文档大小是有限制的:

“最大BSON文档大小为16 16。

最大文档大小有助于确保单个文档不能使用过多的RAM,或者在传输期间不能使用过多的带宽。为了存储大于最大大小的文档,MongoDB提供了GridFS API。有关GridFS的更多信息,请参见蒙古文件和驱动程序文档。“

来源:http://docs.mongodb.org/manual/reference/limits/

如果在更新时超过当前分配的文档空间(http://docs.mongodb.org/manual/core/write-performance/“文档增长”),也会产生性能影响。

您的第一个解决方案容易受到这两个问题的影响。

第二个是(免责声明:在20-30个内部项目的情况下)不太容易达到极限,但在进行更新时仍然可能需要重新分配。我还没有遇到类似情况下的问题,所以这可能是可行的方法。您可能需要查看记录填充(http://docs.mongodb.org/manual/core/record-padding/)以获得更多细节。

而且,如果所有这些都失败了,您也可以将内部项分割出去。

希望这能有所帮助!

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21162012

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档