5

我写了一个测试程序来检查有或没有日志的 mongodb 写入性能:要插入的项目:10000

case1: 插入(w = 1, j = 1)结果:在340,620 毫秒内插入 10000 个文档(大约每秒29个文档)

case2: 插入(w = 0, j = 1)结果:360ms 内插入 10000 个文档大约每秒 27700 个文档)

是什么(w = 0, j = 1)意思?

case2 有耐用性吗?

4

1 回答 1

4

假设 journaled 的工作在上一个版本中没有改变,我相信你看到的是w=0. 由于您拥有w=0http://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以较短的间隔记录日志的速度,就好像它们都已被期刊承认一样。

于 2014-11-14T09:54:03.133 回答