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

Android 9 introduit un mode spécial SQLiteDatabase appelée Compatibility Write-Ahead Logging (WAL) permet à une base de données d'utiliser journal_mode=WAL tout en conservant le comportement de 1 connexion 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 de la quantité d'écritures. Par exemple, sur une extension système de fichiers, WAL peut entraîner une vitesse d’écriture quatre fois supérieure.

Les fichiers WAL de compatibilité sont activés par défaut et ne nécessitent aucune la mise en œuvre.

Désactiver le WAL de compatibilité

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

Exemple :

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

Vous pouvez désactiver les fichiers de configuration WAL de compatibilité pour les configurations où le mode journal n'offre aucun avantage en termes de performances par rapport au rollback traditionnel de journal intime. Par exemple, sur un système de fichiers F2FS, bien que SQLite accepte des écritures atomiques et que les performances du journal DELETE sont similaires à celles de WAL, WAL peut augmenter la quantité d'écritures de 10% à 15%.

Validation

Pour valider le mode WAL de compatibilité, exécutez la commande suivante : Tests CTS du module CtsDatabaseTestCases. Les tests CTS vérifieront le comportement attendu lorsque la WAL de compatibilité est activée.