0

在插入 mongodb 时,我可以将 writeconcern 设置为只会忽略 Duplicate Key 错误的东西吗?我想完全忽略这些错误,但如果出现其他问题,仍然可以捕获。我特别想知道我是否失去了与数据库的连接,或者 mongod 本身是否崩溃。(我在一个研究网络上,所以这两件事并不总是最可靠的。)

我看到的似乎接近的 writeconcern 是 UNACKNOWLEDGED,但我不知道它到底会捕获什么以及将忽略什么。

我的应用程序是用 mongo 驱动程序版本 2.10.1 和使用 mongo 版本 2.4.6 的 Java 编写的

我避免使用默认的 writeconcern 并简单地捕获异常,因为我不想要异常开销。我预计重复键的数量会很高。这是一个愚蠢的担忧吗?

4

1 回答 1

3

关于WriteConcern的官方文档显示了 WriteConcern 设置有哪些选项。

( WriteConcern.UNACKNOWLEDGED){w:0,j:0,fsync:0}将报告网络错误,因此您已经了解了这一点。当数据库崩溃时,与它的连接将立即中断(当操作系统仍在运行时)或在几秒钟后超时(当整个操作系统甚至物理服务器崩溃时),所以你也应该注意到相当快.

下一个最好的 WriteConcern ( {w:1,j:0,fsync:0}, 或WriteConcern.SAFE) 等待副本集的主节点确认,因此它将报告主键唯一索引错误。

如果有一个设置可以使服务器在收到数据后但在解释数据之前做出响应,它不会快得多。验证 BSON 语法通常很便宜,检查任何唯一索引中的冲突也不会贵很多。至少与网络往返时间相比。

当您担心在 Java 中捕获异常的性能时:Java 中的异常处理也不昂贵。

于 2013-11-09T00:31:41.827 回答