主要观点:作者构建数据库并以 SQLite 为标准对比,发现苹果捆绑的 SQLite 版本不符合 ACID 规范,默认使用fsync()
同步,而非F_BARRIERFSYNC
。介绍了fsync()
和fcntl()
在不同系统的情况,以及F_FULLFSYNC
和F_BARRIERFSYNC
的作用和区别。通过测试发现苹果的 SQLite 不会默认使用F_BARRIERFSYNC
,而是在启用PRAGMA fullfsync
时用fcntl(.., F_BARRIERFSYNC,..)
替换fcntl(.., F_FULLFSYNC,..)
。
关键信息:
- 作者构建数据库并对比 SQLite。
- 苹果捆绑 SQLite 版本不符合 ACID 规范。
fsync()
和fcntl()
的系统差异及作用。- 测试发现苹果 SQLite 的同步行为。
重要细节: - 2022 年 2 月 Scott Perry 提及
F_BARRIERFSYNC
,有人误解其为默认行为。 - macOS 中
fsync()
的说明及F_FULLFSYNC
的作用。 - 作者创建基准测试比较 Sediment 和 SQLite 在不同系统的性能。
- 通过 dtrace 追踪系统调用验证 SQLite 的同步行为。
- 讨论
F_BARRIERFSYNC
对不同应用的重要性及苹果决策的原因。 - 未在 iOS 上测试且怀疑苹果未维护单独版本 SQLite 且其为闭源。
- 鼓励苹果公开 SQLite 更新。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。