【发布时间】:2013-07-03 11:07:48
【问题描述】:
在 WWDC 2013 会议“207:Core Data 中的新功能”中,他们提到您可以在添加持久存储时通过传递选项字典来启用 SQLite WAL:
@{ NSSQLitePragmasOption: @"journal_mode = WAL" }
(在 iOS4+ 上可用,并将成为未来 iOS 版本的默认设置)。
我想知道在我的应用中为早期 iOS 版本启用这通常是否是一件好事。
我咨询了SQLite page about write ahead logging 以及他们提到的缺点,其中大多数似乎不适用于iOS,除了:
- WAL 可能比 应用程序中的传统回滚日志方法 读书很少写。
几乎所有的优势听起来都像是在 iOS 上的优势:
- WAL 在大多数情况下明显更快。
- WAL 提供更多并发性,因为读取器不会阻塞写入器,写入器不会阻塞读取器。读写可以同时进行。
- 磁盘 I/O 操作往往使用 WAL 更加有序。
- WAL 使用更少的 fsync() 操作,因此在 fsync() 系统调用被破坏的系统上不易受到问题的影响。
我假设(可能需要对我的应用程序进行一些检查以确保它不会减慢速度)启用这将是一件好事,但是我应该注意或任何已知的缺点问题?
【问题讨论】: