我编写了一个测试程序来检查mongodb写入性能是否有日记: 要插入的项目:10000
情形1:
插入(w = 1, j = 1)
结果:在 340,620毫秒中插入10000个文档(约每秒 29 个文档)
情况2:
插入(w = 0, j = 1)
结果:10000个文档插入 360ms (约 27700 每秒文档数)
(w = 0, j = 1)
是什么意思?
我们在case2中有耐用性吗?
答案 0 :(得分:4)
假设在最后一个版本中记录的工作没有改变,我相信你所看到的是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还增加了它向日志提交操作的频率。
可是:
Unacknowledged类似于忽略的错误;但是,驱动程序将尽可能尝试接收和处理网络错误。
值得注意的是"错误被忽略"。如果你在更新/插入它们时遇到错误,你就不会被告知它,但忽略有错误的文件,你的耐久性应该是相同的。
当然,它不如实际执行w=1
那么好,但它没有套接字确认(旧w=0
)那么糟糕,可能会丢失大量的写入。
所以你得到w=0
的速度,间隔很短,就好像它们都是日记记录一样。