iOS CoreData - il des inconvénients à l'activation de sqlite WAL / Write-Ahead Logging
Lors de la WWDC 2013 session '207: Quoi de neuf dans la Base de Données', ils mentionnent que vous pouvez activer SQLite WAL en passant, un dictionnaire lors de l'ajout d'un magasin persistant:
@{ NSSQLitePragmasOption: @"journal_mode = WAL" }
(qui est disponible sur iOS4+ et sera la valeur par défaut pour les futures versions iOS).
Je me demande si ce serait généralement une bonne chose à activer dans mon application pour les précédentes versions iOS trop.
J'ai consulté le SQLite page sur écrire à l'avance de journalisation et les inconvénients qu'ils mentionnent, la plupart d'entre eux ne semblent pas s'appliquer à iOS, à l'exception de:
- WAL peut-être très légèrement plus lent (peut-être 1% ou 2% plus lent) que l'
traditionnelles de restauration-journal de l'approche dans les applications que dans la plupart des cas
lit et rarement écrire.
à peu près tous les avantages de le faire sonner comme ils vont probablement être un avantage sur iOS:
- WAL est nettement plus rapide dans la plupart des scénarios.
- WAL fournit plus de la simultanéité comme les lecteurs de ne pas bloquer les écrivains et un écrivain ne bloque pas les lecteurs. La lecture et l'écriture peut être réalisée en même temps.
- Disk I/O operations a tendance à être plus séquentielle à l'aide de WAL.
- WAL utilise beaucoup moins de fsync() exploitation et est donc moins vulnérables à des problèmes sur les systèmes où la fsync() de l'appel système est cassé.
Je suis considère que (peut-être sujet à faire quelques vérifications sur mon appli pour assurez-vous de ne pas ralentir les choses) que ce serait une bonne chose pour l'activer, mais est-il un inconvénient que je devrait voir le ou les problèmes connus?
Vous devez vous connecter pour publier un commentaire.
http://pablin.org/2013/05/24/problems-with-core-data-migration-manager-and-journal-mode-wal/ suggère que leurs problèmes avec les migrations, en particulier:
(également mentionnée sur https://github.com/magicalpanda/MagicalRecord/issues/490 - ce qui suggère que si vous utilisez magique enregistrement puis c'est déjà la valeur par défaut WAL )
Concernant le bug qui se produit avec les non-léger migrations qui comportent des sous-classement NSMigrationManager, que j'ai re-signalé à Apple que le Bug 16038419.
J'ai aussi fait un autre, méthode-swizzling solution de contournement patchs le bug dans le cas où vous toujours souhaitez utiliser l'héritage de suppression/restauration de la journalisation. Comme je le comprends, Pablin fixer est pour les cas où vous souhaitez utiliser WAL sauf pendant les migrations. Aussi, vous pouvez voir que le bug se produire dans cette vidéo.