我编写了一个测试程序来检查有无日志记录的 mongodb 写入性能: 要插入的项目:10000
案例 1:
使用 (w = 1, j = 1)
插入结果:在 340,620 毫秒 中插入 10000 个文档(大约每秒 29 个文档)
案例2:
使用 (w = 0, j = 1)
插入结果:在 360ms 中插入 10000 个文档(大约每秒 27700 个文档)
(w = 0, j = 1)
是什么意思?
我们在案例 2 中有耐用性吗?
最佳答案
假设日志的工作在上一个版本中没有改变,我相信您看到的是 w=0
的速度。由于您有 w=0
( http://docs.mongodb.org/manual/core/write-concern/#unacknowledged ),您只是确认命令已发送到 MongoDB 实例。
w=0
的行为已从早期版本的 MongoDB 中确认的套接字更改,因此无法减轻网络错误。
因此 w=0
的值覆盖了 j=1
的值并导致未确认的写入,但是,从理论上讲,持久性应该与 相同j=1
仍然导致:
http://docs.mongodb.org/manual/core/write-concern/#journaled
MongoDB also increases the frequency that it commits operations to the journal.
但是:
Unacknowledged is similar to errors ignored; however, drivers will attempt to receive and handle network errors when possible.
很高兴注意到“错误被忽略”。如果您在更新/插入它们时遇到错误,您不会被告知,但忽略有错误的文档,您的持久性应该相对相同。
当然,它不如实际执行 w=1
好,但也没有 socket acknowledged (old w=0
) 差,后者可能会丢失大量写入。
因此,您获得了 w=0
的速度,并且在很短的时间间隔内进行记录,就好像它们都是被记录在日记中一样。
关于写关注中的 MongoDb 日志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26924221/