Docs Menu
Docs Home
/ /
Archivos del reino

Reducir el tamaño del archivo Realm - SDK de React Native

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.

Novedad en la versión 11.3.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 la nueva. Por lo tanto, para compactar, se requiere un espacio de almacenamiento libre equivalente al tamaño original del archivo realm.

Puede configurar Realm 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 de reino.

Puede configurar Realm para que verifique el archivo de reino cada vez que se abra especificando un FunciónshouldCompact para la configuración. El siguiente ejemplo de código muestra cómo hacerlo:

const shouldCompact = (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 100MB in size and less than 50% 'used'
const oneHundredMB = 100 * 1024 * 1024;
return totalBytes > oneHundredMB && usedBytes / totalBytes < 0.5;
};
const config = { shouldCompact };
let realm = await Realm.open(config);

Como alternativa, puede compactar un archivo de reino sin obtener primero una instancia del reino llamando al método compact():

const realm = new Realm("my.realm");
realm.compact();

El compact() El método devolverá verdadero si la operación es exitosa.

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.

Estos cálculos podrían verse así:

// Set a maxFileSize equal to 20MB in bytes
const maxFileSize = 20 * 1024 * 1024;
/* Check for the realm file size to be greater than the max file size,
* and the amount of bytes currently used to be less than 50% of the
* total realm file size */
return (totalBytes > (double)maxFileSize) &&
((double)usedBytes / totalBytes < 0.5);

Experimente con las condiciones para encontrar el equilibrio adecuado entre la frecuencia con la que debe compactar los archivos de reino en su aplicación.

Volver

Cifrar un reino

En esta página