La Partition-Based Sync es una moda más antigua para utilizar Atlas Device Sync con el Realm React Native SDK. Recomendamos usar Flexible Sync para nuevas aplicaciones. La información en esta página es para usuarios que aún utilizan Partition-Based Sync.
Para obtener más información sobre la sincronización basada en particiones y cómo configurarla en Atlas App Services, consulte Sincronización basada en particiones en la documentación de App Services.
Valor de partición
Cuando se selecciona Partition-Based Sync para la configuración de la aplicación de backend, la implementación del cliente debe incluir un valor de la partición. Este es el valor del campo clave de partición que se selecciona al configurar la Partition-Based Sync.
El valor de la partición determina a qué datos puede acceder la aplicación cliente.
Pasa el valor de la partición cuando abres un reino sincronizado.
Configurar un dominio de sincronización basado en particiones
Para abrir un reino de sincronización flexible, use @realm/reactLa función createRealmContext() y su valor devuelto RealmProvider.
En un RealmProvider que está anidado en UserProvider un, agregue una sync propiedad con un objeto SyncConfiguration que flexible: true contenga.
Tenga en cuenta que UserProvider pasa automáticamente un usuario autenticado a RealmProvider.
<RealmProvider schema={[YourObjectModel]} sync={{ partitionValue: 'testPartition', }}> <RestOfApp /> </RealmProvider>
Copiar datos y abrir un nuevo reino
Novedades en la realm@10.14.0 versión.
Para copiar datos de un reino existente a un nuevo reino con diferentes opciones de configuración, pase la nueva configuración al método Realm.writeCopyTo().
Nota
Solo sincronización del mismo tipo
Este método solo permite copiar una configuración de sincronización basada en particiones para otro usuario de sincronización basada en particiones, o una configuración de sincronización flexible para otro usuario de sincronización flexible. No se puede usar este método para convertir entre un dominio de sincronización basada en particiones y uno de sincronización flexible, ni viceversa.
En la configuración del nuevo reino, debes especificar.path
Si escribe el dominio copiado en un archivo de dominio ya existente, los datos se escriben objeto por objeto. La operación de copia reemplaza los objetos si ya existen para las claves primarias dadas. Los esquemas del dominio que copia y del dominio en el que escribe deben ser compatibles para que la operación de copia se realice correctamente. Solo se copian los objetos de los esquemas de ambas configuraciones.
El cambio de configuración puede incluir modificaciones en SyncConfiguration:
Reino local a reino sincronizado
Reino sincronizado con el reino local
El cambio de configuración también puede incluir cambios en la propiedad encryptionKey del Configuration:
Reino cifrado a reino no cifrado
Reino no cifrado a reino cifrado
Ejemplo
Convertir dominio local en dominio sincronizado
const localConfig = { schema: [Car], path: "localOnly.realm", }; const localRealm = await Realm.open(localConfig); const syncedConfig = { schema: [Car], path: "copyLocalToSynced.realm", sync: { user: app.currentUser, partitionValue: "myPartition", }, }; localRealm.writeCopyTo(syncedConfig); const syncedRealm = await Realm.open(syncedConfig);
const localConfig: Realm.Configuration = { schema: [Car], path: "localOnly.realm", }; const localRealm = await Realm.open(localConfig); const syncedConfig: Realm.Configuration = { schema: [Car], path: "copyLocalToSynced.realm", sync: { user: app.currentUser!, partitionValue: "myPartition", }, }; localRealm.writeCopyTo(syncedConfig); const syncedRealm = await Realm.open(syncedConfig);
También puede combinar cambios en la configuración. Por ejemplo, puede abrir un dominio cifrado local como un dominio sincronizado sin cifrar, o un dominio sincronizado sin cifrar como un dominio sincronizado y cifrado.
Ejemplo
Convertir un dominio cifrado sincronizado a un dominio local sin cifrar
// Create a secure key. const encryptionKey = new Int8Array(64); // ... store key const syncedEncryptedConfig = { schema: [Car], path: "syncedEncrypted.realm", sync: { user: app.currentUser, partitionValue: "myPartition", }, encryptionKey, }; const syncedEncryptedRealm = await Realm.open(syncedEncryptedConfig); const localUnencryptedConfig = { schema: [Car], path: "copyLocalUnencrypted.realm", }; syncedEncryptedRealm.writeCopyTo(localUnencryptedConfig); const localUnencryptedRealm = await Realm.open(syncedEncryptedConfig);
// Create a secure key. const encryptionKey = new Int8Array(64); // ... store key const syncedEncryptedConfig: Realm.Configuration = { schema: [Car], path: "syncedEncrypted.realm", sync: { user: app.currentUser!, partitionValue: "myPartition", }, encryptionKey, }; const syncedEncryptedRealm = await Realm.open(syncedEncryptedConfig); const localUnencryptedConfig: Realm.Configuration = { schema: [Car], path: "copyLocalUnencrypted.realm", }; syncedEncryptedRealm.writeCopyTo(localUnencryptedConfig); const localUnencryptedRealm = await Realm.open(syncedEncryptedConfig);
Migrar de la sincronización basada en particiones a la sincronización flexible
Puedes migrar tu App Services Device Sync Mode de Partition-Based Sync a Flexible Sync. La migración es un proceso automático que no requiere ningún cambio en el código de tu aplicación. La migración automática requiere la versión 11.10.0 o superior del SDK de Realm Node.js.
La migración le permite conservar sus usuarios y configuración de autenticación de App Services. Flexible Sync ofrece opciones de configuración de permisos más versátiles y una sincronización de datos más granular.
Para obtener más información sobre cómo migrar su aplicación de App Services de sincronización basada en particiones a sincronización flexible, consulte Migrar modos de sincronización de dispositivos.
Actualización del código del cliente después de la migración
La migración automática de la sincronización basada en particiones a la sincronización flexible no requiere cambios en el código de cliente. Sin embargo, para facilitar esta funcionalidad, Realm gestiona automáticamente las diferencias entre los dos modos de sincronización mediante:
Creación automática de suscripciones de sincronización flexible para cada tipo de objeto donde
partitionKey == partitionValue.Inyectar un campo
partitionKeyen cada objeto si no existe. Esto es necesario para la suscripción automática a Sincronización Flexible.
Si necesita actualizar el código de su cliente después de la migración, considere actualizar su base de código para eliminar las funciones de migración ocultas. Le recomendamos actualizar su base de código cuando:
Agregue un nuevo modelo o cambie un modelo en su base de código de cliente.
Agrega o cambia funcionalidad que implica leer o escribir objetos de Realm
Desea implementar un control más preciso sobre los datos que sincroniza
Realice estos cambios para convertir el código de cliente de sincronización basada en particiones para utilizar la sincronización flexible:
Agregue
flexible:truea su objeto SyncConfiguration donde abre un reino sincronizado.Agregue propiedades relevantes a sus modelos de objetos para usarlas en sus suscripciones de Sincronización Flexible. Por ejemplo, podría agregar una propiedad
ownerIdpara permitir que un usuario sincronice solo sus propios datos.Elimine las suscripciones automáticas de sincronización flexible y cree manualmente las suscripciones relevantes.
Para obtener ejemplos de estrategias de permisos de sincronización flexible, incluidos ejemplos de cómo modelar datos para estas estrategias, consulte la Guía de permisos de sincronización de dispositivos.
Eliminar y crear suscripciones manualmente
Al migrar de la sincronización basada en particiones a la sincronización flexible, Realm crea automáticamente suscripciones ocultas de sincronización flexible para su aplicación. La próxima vez que agregue o modifique suscripciones, le recomendamos lo siguiente:
Esto le permite ver toda su lógica de suscripción junta en su base de código para futuras iteraciones y depuraciones.
Para obtener más información sobre las suscripciones de Flexible Sync generadas automáticamente, consulte Migrar la aplicación cliente a Flexible Sync.