什么是MongoDB的fsync?

时间:2012-07-17 22:30:07

标签: mongodb mongodb-query

我一直在使用MongoDB,并看到fsync等待数据刷新到磁盘。好的,所以我认为这是数据安全的解决方案。

它的工作时间很长,比SQL替代方案长。然后我看到我可以将syncdelay放到0,然后速度又回来了,但我想到将来会有很多并发请求。因此,我从更新中删除了fsync选项并插入并删除了syncdelay配置选项。

为了测试数据是否正在写入,我在更新后快速检查了Rockmongo并且数据实际存在,超快!

所以真的,fsync是什么,如果它使写入变慢而没有它写入发生,并且还是快速的?

3 个答案:

答案 0 :(得分:6)

Per Mongo文档:

  

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

  

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

阻塞似乎是原因。

答案 1 :(得分:5)

从技术上讲,

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

MongoDB中的数据安全来自复制/分片/日志,而不是来自强制写入。那种打败了事物的目的。

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

另外,如果将syncdelay设置为零,请确保关闭日记功能。请参阅this

答案 2 :(得分:0)

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

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