在创建文件、重命名等需要修改目录文件的文件列表数据的操作之后,需要不需要进行 sync directory 呢?
具体到 LevelDB 的实现,在 flush manifest 文件的时候,会进行 sync directory 操作,大致原因在注释中有提到,是为了确保 manifest 中引用的文件在文件系统中存在。
然而在创建 WAL 文件时,并没有任何 sync directory 的操作。如此,是否会因为服务器宕机造成数据丢失呢?虽然现有的日志文件系统似乎可以通过重做日志恢复文件系统的元信息。那在非日志文件系统上,岂不是凉凉?
LevelDB 创建 WAL 文件的代码: https://github.com/google/leveldb/blob/6721eda0b46654d3531b4a0a00c90dc659b337d6/db/db_impl.cc#L1360
LevelDB flush manifest 文件的代码: https://github.com/google/leveldb/blob/6721eda0b46654d3531b4a0a00c90dc659b337d6/util/env_posix.cc#L306
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.