Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
Click here >
Docs Menu
Docs Home
/ /
Realm Files

Agrupar un archivo de reino - Node SDK

Realm permite agrupar archivos de realm. Al agrupar un archivo de realm, se incluye una base de datos y todos sus datos en la descarga de la aplicación.

This allows users to start applications for the first time with a set of initial data. For synced realms, bundling can avoid a lengthy initial download the first time a user opens your application. Instead, users must only download the synced changes that occurred since you generated the bundled file.

Para crear y agrupar un archivo de reino con su aplicación:

  1. Crea un archivo de reino que contenga los datos que deseas agrupar.

  2. Añade el archivo realm empaquetado a tu aplicación de producción.

  3. En su aplicación de producción, abra el dominio desde el archivo de recursos incluido. Para dominios sincronizados, debe incluir la clave de partición.

Nota

Bundle Synchronized Realms

SDK version 10.12.0 introduced the ability to bundle synchronized realms. Before version 10.12.0, you could only bundle local realms. See the Bundle a Synchronized Realm section for details on considerations and limitations when bundling a synchronized realm.

  1. Build a temporary realm app that shares the data model of your application.

  2. Open a realm and add the data you wish to bundle. If using a synchronized realm, allow time for the realm to fully sync.

  3. Utiliza el método writeCopyTo() para copiar el realm a un nuevo archivo:

    const originalPath = path.join(__dirname, "original.realm");
    const originalConfig = {
    schema: [Car],
    path: originalPath,
    };
    const originalRealm = await Realm.open(originalConfig);
    const copyPath = path.join(__dirname, "copy.realm");
    originalRealm.writeCopyTo(copyPath);

    writeCopyTo() automatically compacts your realm to the smallest possible size before copying.

    Nota

    Diferencias entre reinos sincronizados y reinos solo locales

    El ejemplo anterior utiliza una SyncConfiguration para configurar un realm sincronizado para el campo sync de la Configuration. Para crear una copia de un realm local, no incluyas el campo sync en tu objeto Configuration.

  4. Tome nota de la ruta del archivo realm incluido, que puede encontrarse en la ubicación especificada en el argumento pasado a writeCopyTo() en el paso anterior. Necesitarás este archivo para usar el realm incluido en tu aplicación de producción, como se describe en la siguiente sección.

    temp_realm_app
    .
    ├── copyOfDefault.realm
    ... rest of files in _temp_ application

Ahora que tiene una copia del reino que contiene los datos iniciales, inclúyalo en su aplicación de producción.

Añade el archivo Realm empaquetado creado en la sección anterior a tu aplicación de producción.

aplicación del reino de producción
.
├── copyOfDefault.realm
... rest of files in _prod_ application

Ahora que tienes una copia del realm incluida con tu aplicación de producción, debes agregar código para usarla.

Cree una configuración con la ruta al dominio incluido como valor para el path campo. Pase esa configuración al método Realm.open(). Ahora puede trabajar con los datos de su dominio incluido en el dominio que acaba de abrir.

const copyConfig = {
schema: [Car],
path: "path/to/bundled/file.realm"
};
const copyRealm = await Realm.open(copyConfig);

Nota

Solo sincronización de mismo tipo

This method only supports copying a Partition-Based Sync configuration for another Partition-Based Sync user, or a Flexible Sync configuration for another Flexible Sync user. You cannot use this method to convert between a Partition-Based Sync realm and a Flexible Sync realm or vice-versa.

Generally, bundling a synchronized realm works the same as bundling a local-only realm. However, you can only bundle fully synchronized realms. Make sure that the realm has fully synchronized with the server before bundling:

const config = {
sync: {
user: app.currentUser,
partitionValue: app.currentUser.id,
},
schema: [Car],
};
const realm = await Realm.open(config);
// create many changes
realm.write(() => {
for (let i = 0; i < 25; i++) {
realm.create("Car", {
make: "Toyota",
model: "Prius",
miles: i,
owner: app.currentUser.id,
});
}
});
// ensure synchronize all changes before copy
await realm.syncSession.uploadAllLocalChanges();
await realm.syncSession.downloadAllServerChanges();
// changes are synchronized -- we can copy the realm
realm.writeCopyTo(__dirname + "syncedCopy.realm");

Importante

Agrupación de reinos sincronizados

Si su aplicación backend utiliza Sincronización Flexible, los usuarios podrían experimentar un reinicio del cliente la primera vez que abran el archivo de dominio incluido. Esto puede ocurrir cuando el tiempo máximo sin conexión del cliente está habilitado (esta opción está habilitada por defecto). Si el archivo de dominio incluido se generó más de los días especificados en la configuración de tiempo máximo sin conexión del cliente antes de que el usuario sincronice por primera vez, el usuario experimentará un reinicio del cliente.

Las aplicaciones que reinician el cliente descargan el estado completo del dominio desde el backend de la aplicación. Esto anula las ventajas de agrupar un archivo de dominio. Para evitar reinicios del cliente y conservar las ventajas de agrupar archivos de dominio:

  • Evite utilizar un tiempo máximo sin conexión del cliente en aplicaciones que agrupan un reino sincronizado.

  • Si su aplicación utiliza un tiempo máximo de desconexión del cliente, asegúrese de que la descarga de la aplicación siempre incluya un archivo de dominio sincronizado recientemente. Genere un nuevo archivo con cada versión de la aplicación y asegúrese de que ninguna versión permanezca actualizada durante más días que el tiempo máximo de desconexión del cliente.

Further limitations exist when opening a bundled synchronized realm that uses the older Partition-Based Sync. For more information on using realms configured with Partition-Based Sync, refer to Partition-Based Sync - Node.js SDK.

Volver

Reduce Realm File Size

En esta página