Journalisation en écriture anticipée de compatibilité pour les applications

Android 9 introduit un mode spécial de SQLiteDatabase appelé Compatibility write-ahead logging (WAL) qui permet à une base de données d'utiliser journal_mode=WAL tout en préservant le comportement consistant à conserver un maximum d'une connexion par base de données.

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

  1. Activer ou désactiver la journalisation en écriture anticipée en appelant SQLiteDatabase.enableWriteAheadLogging ou disableWriteAheadLogging
  2. Mode journal explicitement demandé en appelant SQLiteDatabase.OpenParams.setJournalMode(String mode)

L'activation du mode journal WAL peut entraîner une amélioration significative des performances et une réduction du nombre d'écritures. Par exemple, sur un système de fichiers ext4, WAL peut entraîner une amélioration de 4 fois la vitesse d'écriture.

Compatibilité WAL est activée par défaut et ne nécessite aucune implémentation supplémentaire.

Désactiver la compatibilité WAL

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

Par exemple:

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

Vous souhaiterez peut-être désactiver la compatibilité WAL pour les configurations dans lesquelles le mode journal WAL n'offre pas d'avantage en termes de performances par rapport aux modes de journalisation de restauration traditionnels. Par exemple, sur un système de fichiers F2FS, bien que SQLite prenne en charge 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 Compatibilité WAL, exécutez les tests CTS depuis le module CtsDatabaseTestCases. Les tests CTS vérifieront le comportement attendu lorsque la compatibilité WAL est activée.