Docs Menu
Docs Home
/ /
Administrar archivos de Realm

Reducir el tamaño del archivo Realm - Kotlin SDK

Con el tiempo, el espacio de almacenamiento que usa Realm podría fragmentarse y ocupar más espacio del necesario. Para reorganizar el almacenamiento interno y reducir el tamaño del archivo, es necesario compactar el archivo de Realm.

El comportamiento predeterminado de Realm es compactar automáticamente un archivo de reino para evitar que crezca demasiado. Puede usar estrategias de compactación manual cuando la compactación automática no sea suficiente para su caso.

Nuevo en la versión 1.6.0.

El SDK compacta automáticamente los archivos Realm en segundo plano reasignando continuamente los datos dentro del archivo y eliminando el espacio no utilizado. La compactación automática es suficiente para minimizar el tamaño de los archivos Realm en la mayoría de las aplicaciones.

La compactación automática comienza cuando el espacio no utilizado del archivo es más del doble del tamaño de los datos del usuario. La compactación automática solo se realiza cuando no se accede al archivo.

La compactación manual se puede utilizar para aplicaciones que requieren una gestión más estricta del tamaño de archivo o que utilizan una versión anterior del SDK que no admite la compactación automática.

Realm reduce el tamaño del archivo escribiendo una nueva versión (compacta) y reemplazando la original con el nuevo archivo. Por lo tanto, para compactar, se requiere un espacio de almacenamiento libre equivalente al tamaño original del archivo realm.

Puede configurar el reino para compactar automáticamente la base de datos cada vez que se abre un reino, o puede compactar el archivo sin obtener primero una instancia del reino.

Puede configurar Realm para compactar el archivo de reino cada vez que se abra configurando una devolución de llamada para el FuncióncompactOnLaunch para la configuración. Al llamar compactOnLaunch Para la configuración,DEFAULT_COMPACT_ON_LAUNCH_CALLBACK se activará si el archivo supera los 50 MB y 50el % o más del espacio del archivo de dominio no se utiliza. Puede especificar ajustes de compactación personalizados al llamar a compactOnLaunch según las necesidades de su aplicación. El siguiente ejemplo de código muestra cómo hacerlo:

// Set a max file size equal to 100MB in bytes
val maxFileSize = 100 * 1024 * 1024
val config = RealmConfiguration.Builder(setOf(King::class))
.compactOnLaunch{ totalBytes, usedBytes ->
// totalBytes refers to the size of the file on disk in bytes (data + free space)
// usedBytes refers to the number of bytes used by data in the file
// Compact if the file is over the max file size and less than 50% 'used'
(totalBytes > maxFileSize) && ((usedBytes / totalBytes) < 0.5)
}
.build()
val realm: Realm = Realm.open(config)

Alternativamente, puedes compactar un archivo de reino sin tener que abrirlo llamando al método compactRealm:

val config = RealmConfiguration.create(schema = setOf(Item::class))
var compacted = Realm.compactRealm(config)

El método compactRealm devolverá verdadero si la operación es exitosa y falso si no.

Importante

Puedes guardar una copia compactada (y opcionalmente cifrada) de un dominio en otra ubicación de archivo con el método Realm.writeCopyTo. El archivo de destino no puede existir previamente.

Importante

Evite llamar a writeCopyTo dentro de una transacción de escritura. Si se llama dentro de una transacción de escritura, este método copia los datos más recientes. Esto incluye cualquier cambio no confirmado realizado en la transacción antes de llamar a este método.

Compactar manualmente un dominio puede consumir muchos recursos. Su aplicación no debería compactar cada vez que abra un dominio. En su lugar, intente optimizar la compactación para que la aplicación lo haga con la frecuencia justa para evitar que el tamaño del archivo crezca demasiado. Si su aplicación se ejecuta en un entorno con recursos limitados, puede que le convenga compactar al alcanzar un tamaño de archivo determinado o cuando este afecte negativamente al rendimiento.

Estas recomendaciones pueden ayudarle a comenzar a optimizar la compactación para su aplicación:

  • Establezca el tamaño máximo de archivo en un múltiplo del tamaño promedio de su estado de dominio. Si el tamaño promedio de su estado de dominio es de 10MB, puede establecer el tamaño máximo de archivo en 20MB o 40MB, según el uso previsto y las limitaciones del dispositivo.

  • Como punto de partida, compacte los dominios cuando más del 50% del tamaño del archivo del dominio ya no esté en uso. Divida los bytes utilizados actualmente entre el tamaño total del archivo para determinar el porcentaje de espacio utilizado. Luego, verifique que sea menor al 50%. Esto significa que más del 50% del tamaño del archivo del dominio es espacio sin usar, y es un buen momento para compactar. Después de experimentar, puede que un porcentaje diferente funcione mejor para su aplicación.

Volver

Administrar archivos de Realm

En esta página