Registro de escritura anticipada de compatibilidad para aplicaciones

Android 9 introduce un modo especial de SQLiteDatabase llamado Registro de escritura anticipada de compatibilidad (WAL) que permite que una base de datos use journal_mode=WAL mientras preserva el comportamiento de mantener un máximo de una conexión por base de datos.

Compatibilidad WAL está habilitado para la base de datos de una aplicación de forma predeterminada, a menos que la aplicación tenga:

  1. Opte por participar o no en el registro de escritura anticipada llamando SQLiteDatabase.enableWriteAheadLogging o disableWriteAheadLogging
  2. Modo de diario solicitado explícitamente llamando SQLiteDatabase.OpenParams.setJournalMode(String mode)

Habilitar el modo de diario WAL puede generar una mejora significativa en el rendimiento y una reducción en la cantidad de escrituras. Por ejemplo, en un sistema de archivos ext4, WAL puede mejorar 4 veces la velocidad de escritura.

La compatibilidad WAL está habilitada de forma predeterminada y no requiere ninguna implementación adicional.

Deshabilitar compatibilidad WAL

Para deshabilitar el modo WAL de compatibilidad, superponga el recurso de configuración db_compatibility_wal_supported .

Por ejemplo:

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

Es posible que desee deshabilitar WAL de compatibilidad para configuraciones en las que el modo de diario WAL no proporciona una ventaja de rendimiento sobre los modos de diario de reversión tradicionales. Por ejemplo, en un sistema de archivos F2FS, aunque SQLite admite escrituras atómicas y el rendimiento del diario DELETE es similar al de WAL, WAL puede aumentar la cantidad de escrituras entre un 10% y un 15%.

Validación

Para validar el modo WAL de compatibilidad, ejecute pruebas CTS desde el módulo CtsDatabaseTestCases. Las pruebas CTS verificarán el comportamiento esperado cuando Compatibilidad WAL esté habilitada.