На сессии WWDC 2013 "207: что нового в основных данных" они упоминают, что вы можете включить SQLite WAL, передав словарь опций при добавлении постоянного хранилища:
@{ NSSQLitePragmasOption: @"journal_mode = WAL" }
(который доступен на iOS4 + и будет использоваться по умолчанию для будущих версий iOS).
Мне интересно, будет ли это вообще полезно включить в мое приложение для более ранних версий iOS.
Я проконсультировался на странице SQLite о записи на будущее и об их недостатках, большинство из которых, похоже, не относятся к iOS, кроме:
- WAL может быть немного медленнее (возможно, на 1% или на 2% медленнее), чем традиционный подход к откату-журналу в приложениях, которые в основном читает и редко пишет.
В значительной степени все преимущества звучат так, как будто они, вероятно, будут полезны для iOS:
- В большинстве сценариев WAL значительно быстрее.
- WAL предоставляет больше concurrency, поскольку читатели не блокируют писателей, и писатель не блокирует читателей. Чтение и запись могут продолжаться одновременно.
- Операции диск ввода-вывода имеют тенденцию быть более последовательными с использованием WAL.
- WAL использует намного меньше операций fsync() и, следовательно, менее уязвим для проблем в системах, где системный вызов fsync() нарушен.
Я собираюсь (возможно, подвергнусь проверке на моем приложении, чтобы убедиться, что это не замедлит работу), что это было бы хорошо, что бы включить, но есть ли недостатки, которые я должен наблюдать или какие-либо известные вопросы?