Journalisation préalable (write-ahead logging) pour la compatibilité des applications

Android 9 introduit un mode spécial de SQLiteDatabase appelé journalisation WAL (Write-Ahead Logging) de compatibilité, qui permet à une base de données d'utiliser journal_mode=WAL tout en conservant le comportement de maintien d'une connexion maximale par base de données.

La compatibilité WAL est activée par défaut pour la base de données d'une application, sauf si l'application :

  1. Vous avez activé ou désactivé la journalisation préalable en appelant SQLiteDatabase.enableWriteAheadLogging ou disableWriteAheadLogging.
  2. Mode journal demandé explicitement en appelant SQLiteDatabase.OpenParams.setJournalMode(String mode)

L'activation du mode journal WAL peut améliorer considérablement les performances et réduire le nombre d'écritures. Par exemple, sur un système de fichiers ext4, WAL peut multiplier la vitesse d'écriture par quatre.

La journalisation WAL de compatibilité est activée par défaut et ne nécessite aucune implémentation supplémentaire.

Désactiver le WAL de compatibilité

Pour désactiver le mode WAL de compatibilité, superposez la ressource de configuration db_compatibility_wal_supported.

Exemple :

<bool name="db_compatibility_wal_supported">false</bool>

Vous pouvez désactiver le WAL de compatibilité pour les configurations dans lesquelles le mode journal WAL n'offre pas d'avantage en termes de performances par rapport aux modes journal de restauration traditionnels. Par exemple, sur un système de fichiers F2FS, bien que SQLite soit compatible avec les écritures atomiques et que les performances du journal DELETE soient similaires à celles de WAL, WAL peut augmenter le nombre d'écritures de 10 à 15 %.

Validation

Pour valider le mode WAL de compatibilité, exécutez les tests CTS à partir du module CtsDatabaseTestCases. Les tests CTS vérifieront le comportement attendu lorsque la compatibilité WAL est activée.