在Mongodb中索引子数据库的小数组会影响性能吗?

时间:2018-01-29 17:02:58

标签: mongodb performance indexing

我的Mongodb系列具有以下文档结构:

{
    _id: 1,
    my_dict: {
        my_key: [
            {id: x, other_fields: other_values},
            ...
        ]
    },
    ...
},

我需要经常更新数组子文档,因此id字段上的索引似乎是个好主意。不过,我有很多文件(数百万),但我的内部数组很小(最多20个元素)。与索引成本相比,它还能为索引提高性能吗?

PS:我没有使用id作为键(dict而不是数组),因为我还经常需要获取“数组”中的元素数量(仅$size适用于数组)。我使用Mongodb 3.2时无法使用count

后续问题:如果它会产生很大的不同,我可以改为使用这样的字典:

{id: {others_fields: other_values}}

并将自己的大小存储在一个字段中。我不喜欢这个是我需要另一个字段并自己更新(可能是错误,因为我每次添加/删除项目时都需要使用$inc而不是依赖于“真实”值。我还必须管理一个密钥可能被调用_my_size的可能性,这会与我的逻辑冲突。它看起来像这样:

{
    _id: 1,
    my_dict: {
        my_key: {
            id: {other_fields: other_values},
            _my_size: 1
        },
    },
},

仍然不确定哪个最适合表现。我将需要更新子文档(使用id字段),以及计算$size很多(可能是更新的1/10)。

哪种架构/策略会给我带来更好的表现?或者更重要的是,它实际上会产生很大的影响吗? (每秒可能有数千个电话)

更新示例:

update(
    {_id: 1, my_dict.my_key.id: update_data_id},
    {$set: {my_dict.my_key: update_data}}
)

获取大小示例:

aggregate(
    {$match: {_id: 1}},
    {$project: {_id: 0, nb_of_sub_documents: {$size: $my_dict.my_key}}}

0 个答案:

没有答案