Compatibilidad del registro de escritura anticipada para apps

Android 9 presenta un modo especial de SQLiteDatabase llamado registro de escritura anticipada (WAL) de compatibilidad, que permite que una base de datos use journal_mode=WAL y, al mismo tiempo, preservar el comportamiento de mantener un máximo de uno por base de datos.

Los WAL de compatibilidad están habilitados para la base de datos de una app de forma predeterminada, a menos que app tiene una de las siguientes opciones:

  1. Habilitar o inhabilitar el registro de escritura por adelantado mediante una llamada SQLiteDatabase.enableWriteAheadLogging o disableWriteAheadLogging
  2. Se solicitó explícitamente el modo de diario mediante una llamada SQLiteDatabase.OpenParams.setJournalMode(String mode)

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

El WAL de compatibilidad está habilitado de forma predeterminada y no requiere ninguna configuración para implementarlos.

Inhabilita el WAL de compatibilidad

Para inhabilitar el modo WAL de compatibilidad, superpone el db_compatibility_wal_supported recurso de configuración.

Por ejemplo:

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

Es posible que desees inhabilitar el WAL de compatibilidad para las configuraciones en las que el WAL no ofrece una ventaja de rendimiento sobre la reversión tradicional diario. Por ejemplo, en un sistema de archivos F2FS, aunque SQLite admite escrituras atómicas y el rendimiento del diario DELETE es similar al WAL, WAL puede aumentar la cantidad de operaciones de escritura entre un 10% y un 15%.

Validación

Para validar el modo WAL de compatibilidad, ejecuta Pruebas de CTS del módulo CtsDatabaseTestCases. Las pruebas del CTS verificarán los cuando el WAL de compatibilidad está habilitado.