在MongoDB中预填充数组的正确方法是什么?

时间:2013-03-20 09:20:29

标签: performance mongodb

MongoDB文档说,增长的数组很慢,应该尽可能地减少或消除它。我有一系列子文档(假设这些是对博客文章的评论):

comments = [ {name : "E.D.", date : "2013.03.20", text : "awesome stuff!"},
             {name : "J.L.", date : "2013.03.21", text : "tl;dr"} ]

并且它会相当可预测地增长,所以我认为应该从一开始就预先填充效率。但是我需要自己创建子文档:

### I Version
comments = [ { },
             { } ]

或仅用零来初始化数组是否足够?

### II Version
comments = [ 0,
             0 ]

(当然,我应该跟踪访问者实际留下的评论数量。)

“评论”的大小可以达到几KB,这会对文档增长产生什么影响?也许我应该创建与最大允许文本大小相同的占位符?

### III Version
comments = [ {name : "Name Surname", date : "1970.01.01", text : "this is a placeholder"},
             {name : "Name Surname", date : "1970.01.01", text : "this is a placeholder"} ]

1 个答案:

答案 0 :(得分:0)

使用空哈希或零预填充是没有意义的:当您插入实际数据时,文档将会扩展。

你的第三个版本看起来更像它。虽然在插入真实评论时清除虚拟数据似乎并非易事。

您也可以在特殊字段中插入足够大的文本块,然后在插入注释时将其删除。像这样:

db.posts.insert({
  comments: [],
  padding: 'lorep ipsum ... x N'
})


db.posts.update(query, 
                {$push: {comments: comment_data},
                 $unset: padding})
相关问题