Journalisation préalable de compatibilité pour les 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 consistant à conserver une connexion maximale par base de données.

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

  1. Activer ou désactiver la journalisation WAL (Write-Ahead Logging) 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 améliorer la vitesse d'écriture de 4 fois.

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

Désactiver 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 où le mode de journal WAL n'offre pas d'avantage en termes de performances par rapport aux modes de journal de rollback 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 du journal WAL, le journal WAL peut augmenter le nombre d'écritures de 10 à 15 %.

Validation

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