我写了一个测试程序来检查有或没有日志的 mongodb 写入性能:要插入的项目:10000
case1:
插入(w = 1, j = 1)
结果:在340,620 毫秒内插入 10000 个文档(大约每秒29个文档)
case2:
插入(w = 0, j = 1)
结果:360ms 内插入 10000 个文档(大约每秒 27700 个文档)
是什么(w = 0, j = 1)
意思?
case2 有耐用性吗?
假设 journaled 的工作在上一个版本中没有改变,我相信你看到的是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 类似于忽略的错误;但是,驱动程序将尽可能尝试接收和处理网络错误。
很高兴注意到“错误被忽略”。如果您在更新/插入它们时遇到错误,您不会被告知它,但忽略有错误的文档,您的持久性应该是相对相同的。
当然,它不如实际做 a 好,w=1
但也不像 socket 承认(旧w=0
)那么糟糕,后者可能会丢失大量写入。
因此,您获得了w=0
以较短的间隔记录日志的速度,就好像它们都已被期刊承认一样。