我一直在使用MongoDB,并看到fsync
等待数据刷新到磁盘。好的,所以我认为这是数据安全的解决方案。
它的工作时间很长,比SQL替代方案长。然后我看到我可以将syncdelay
放到0
,然后速度又回来了,但我想到将来会有很多并发请求。因此,我从更新中删除了fsync
选项并插入并删除了syncdelay
配置选项。
为了测试数据是否正在写入,我在更新后快速检查了Rockmongo并且数据实际存在,超快!
所以真的,fsync
是什么,如果它使写入变慢而没有它写入发生,并且还是快速的?
答案 0 :(得分:6)
Per Mongo文档:
fsync
的主要用途是刷新和锁定数据库以进行备份。
也
fsync
操作在运行时阻止所有其他写操作。
阻塞似乎是原因。
答案 1 :(得分:5)
fsync
是一个强制将所有数据刷新到磁盘的管理命令。您不应该在代码中使用它,至少通常不是这样。它用于锁定数据库以进行备份等。
MongoDB中的数据安全来自复制/分片/日志,而不是来自强制写入。那种打败了事物的目的。
Java驱动程序在WriteConcern
类中包含了这个“写和同步”概念,我从来没有真正喜欢过这个概念。您不必决定数据的哪个部分或多或少重要,而只需信任该工具来完成其工作。
另外,如果将syncdelay
设置为零,请确保关闭日记功能。请参阅this。
答案 2 :(得分:0)
正如其他答案所说,fsync
命令强制刷新,通常在锁定时间点快照的数据文件之前使用。
getLastError
上有一个“fsync”write concern option等待返回所有待处理数据已被刷新到磁盘。你通常不会使用它,“j”选项(一旦发生日志就会返回)返回的速度要快得多,并且仍能确保持久写入。您可以通过更新/插入命令作为所选驱动程序中的安全选项,让它自动为您运行getLastError
命令。