如何在MongoDB中处理大型数据集

3
我需要帮助决定哪种模式类型更适合我的mongodb集合。
假设我想存储一个人拥有的物品清单。人数相对较少,但一个人可能拥有非常多的物品。假设人数在几百人左右,但一个人所拥有的物品数量在几十万个左右。
我可以想到两个选项:
选项1:
    [{
        id: 1,
        name: "Tom",
        things: [
            {
                name: 'red tie',
                weight: 0.3,
                value: 5
            },
            {
                name: 'carpet',
                weight: 15,
                value: 700
            } //... and 300'000 other things 
        ]
    },
    {
        id: 2,
        name: "Rob",
        things: [
            {
                name: 'can of olives',
                weight: 0.4,
                value: 2
            },
            {
                name: 'Porsche',
                weight: 1500,
                value: 40000
            }// and 170'000 other things
        ]
    }//and 214 oher people]
]

选项2:
[
    {
        name: 'red tie',
        weight: 0.3,
        value: 5,
        owner: {
            name: 'Tom',
            id: 1
        }
    },
    {
        name: 'carpet',
        weight: 15,
        value: 700,
        owner: {
            name: 'Tom',
            id: 1
        }
    },
    {
        name: 'can of olives',
        weight: 0.4,
        value: 2,
        owner: {
            name: 'Rob',
            id: 2
        }
    },
    {
        name: 'Porsche',
        weight: 1500,
        value: 40000,
        owner: {
            name: 'Rob',
            id: 2
        }
    }// and 20'000'000 other things
];
  1. 我只会在一次请求中向一个所有者要求物品,从不向多个所有者要求物品。
  2. 返回的物品列表将需要分页,所以...
  3. ...物品将需要根据其中一个参数进行排序
从我的理解来看,第一点建议使用Option 1(仅查询少量文档而不是数百万个文档),但使用Option 2(限制、跳过和排序方法而不是$slice投影和聚合框架)可以更轻松地处理第2点和第3点。
有人能告诉我哪种方式更适合吗?还是我理解有误,有更好的解决方案?
1个回答

3
  1. 我将只在单个请求中向一个所有者请求事物,并且永远不会向多个所有者请求事物。
  2. 返回的事物列表需要分页,因此...
  3. 事物需要按照其中一个参数进行排序

通过创建每个项目为单独文档的集合,可以更好地满足您的第2和第3个要求。使用数组,您必须使用聚合框架来$unwind该数组,这可能会变得非常缓慢。您的第一个要求可以通过在所述集合的owner.nameowner.id字段上创建索引来轻松优化,具体取决于您用于查询的字段。

此外,MongoDB不能很好地处理增长的文档。为了防止用户创建无限增长的文档,MongoDB每个文档有16MB的限制。当您的每个项为几百字节时,数十万个数组条目将超过该限制。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接