6

我已经使用 MongoDB 一段时间了,看到它fsync等待数据刷新到磁盘。好的,所以我认为这是数据安全的解决方案。

它运行良好,需要比 SQL 替代方案更长的时间。然后我看到我可以放syncdelayto 0,然后速度又回来了,但我想未来有很多并发请求会怎么样。所以我fsync从更新和插入中删除了选项,并删除了syncdelay配置选项。

为了测试数据是否正在写入,我在更新后快速检查了 Rockmongo,数据确实在那里,超级快!

所以真的,fsync如果它使写入变慢并且没有它写入发生并且无论如何都快,那是为了什么呢?

4

3 回答 3

5

根据 Mongo 文档:

的主要用途fsync是刷新和锁定数据库以进行备份。

fsync操作在运行时会阻止所有其他写入操作。

阻塞似乎是原因。

于 2012-07-17T22:35:14.610 回答
4

fsync从技术上讲,它是一个强制将所有数据刷新到磁盘的管理命令。你不应该在你的代码中使用它,至少通常不是。它用于锁定数据库以进行备份等。

MongoDB 中的数据安全来自复制/分片/日志,而不是强制写入。这样就违背了事情的目的。

Java 驱动程序在类中包装了这个“写入和同步”概念WriteConcern,我从来没有真正喜欢过它。您不必决定数据的哪一部分或多或少重要,而只需信任该工具即可完成其工作。

此外,如果您设置syncdelay为零,请确保关闭日记功能。看到这个

于 2012-07-17T22:41:17.477 回答
0

正如其他答案所说,该fsync命令强制刷新,通常在您锁定数据文件以获取时间点快照之前使用。

有一个“fsync”写关注选项getLastError它将等待返回所有挂起的数据已刷新到磁盘。但是,您通常不会使用它,“j”选项(一旦发生日志就会返回)返回速度要快得多,并且仍然可以确保持久写入。您可以通过更新/插入命令作为您选择的驱动程序中的安全选项,让它自动getLastError为您运行命令。

于 2012-07-17T23:40:03.287 回答