MongoDB嵌入式与性能角度的参考

mbd*_*dev 17 performance database-design mongodb

我从性能的角度看,嵌入效果更好:"如果性能是一个问题,那就嵌入." (http://www.mongodb.org/display/DOCS/Schema+Design)大多数指南总是说应该嵌入包含.

但是我不确定是这种情况.假设我们有两个对象:Blog和Post.博客包含帖子.

现在将所有帖子嵌入博客中都会出现以下问题:

  1. 分页.由于无法过滤嵌入的对象,我们将始终获取所有帖子,并需要在应用程序中过滤掉它们.
  2. 过滤.与之前相同,当在帖子中搜索单词时,将无法从MongoDB中过滤嵌入的集合.
  3. 插入.我假设插入到集合比插入嵌入对象更快.它是否正确?这写在哪里?
  4. 更新.与之前相同,较小文档(Post)中的内联更新字段可能比内联更新Blog大文档中的帖子更快.它是否正确?

考虑到上述所有情况,我会在一个引用Blog的单独集合中发帖.这是正确的结论吗?

(注意:请不要在响应中考虑文档大小限制,假设每个博客最多有1000个帖子)

And*_*ich 12

1.使用$ slice运算符进行分页:

db.blogs.find({}, {posts:{$slice: [10, 10]}}) // skip 10, limit 10
Run Code Online (Sandbox Code Playgroud)

2.过滤也可能:

db.blogs.find({"posts.title":"Mongodb!"}, {posts:{$slice: 1}}) //take one post
Run Code Online (Sandbox Code Playgroud)

3,4.一般来说,我猜你说的是小的性能差异.这不是火箭科学,只是博客最多1000个帖子.

你说:

Is this the correct conclusion?
Run Code Online (Sandbox Code Playgroud)

,如果你关心性能(一般来说,如果系统很小,你可以使用单独的文件).

我做了关于3,4的小型性能测试,结果如下:

-----------------------------------------------------------------
| Count/Time |  Inserting posts   | Adding to nested collection |
-------------|--------------------------------------------------               
|   1        |   1 ms             |  28 ms                      |
|   1000     |   81 ms            |  590 ms                     |
|   10000    |   759 ms           |  2723 ms                    |
 ---------------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)