Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /
Sync Device Data

Partition-Based Sync - Kotlin SDK

Partition-Based Sync es una moda anterior para usar Atlas Device Sync junto con el Realm Kotlin SDK. Recomendamos usar Flexible Sync para nuevas aplicaciones. La información en esta página es para usuarios que aún están utilizando Partition-Based Sync.

Tip

El SDK de Kotlin de Realm v1.9.0 y versiones posteriores permiten migrar de la sincronización basada en particiones a la sincronización flexible. Para más información, consulte: Migrar de la sincronización basada en particiones a la sincronización flexible.

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.

You must provide a partition value when you open a synced realm.

Para abrir un dominio de sincronización basada en particiones, pase un usuario, una partición y un conjunto de esquemas de objetos de dominio a SyncConfiguration.Builder(). Luego, pase la configuración a Realm.open() para abrir una instancia del dominio:

val app = App.create(YOUR_APP_ID)
runBlocking {
val user = app.login(Credentials.anonymous())
val config =
SyncConfiguration.Builder(user, PARTITION, setOf(/*realm object models here*/))
// specify name so realm doesn't just use the "default.realm" file for this user
.name(PARTITION)
.build()
val realm = Realm.open(config)
Log.v("Successfully opened realm: ${realm.configuration.name}")
realm.close()
}

To adjust specific configuration settings, use the options provided by SyncConfiguration.Builder:

val app = App.create(YOUR_APP_ID)
runBlocking {
val user = app.login(Credentials.anonymous())
val config =
SyncConfiguration.Builder(user, PARTITION, setOf(/*realm object models here*/))
.maxNumberOfActiveVersions(10)
.waitForInitialRemoteData()
.name("realm name")
.build()
val realm = Realm.open(config)
Log.v("Successfully opened realm: ${realm.configuration}")
realm.close()
}

Nota

La progressAsFlow() El oyente del SDK de Kotlin solo está disponible actualmente para dominios que utilizan sincronización basada en particiones. El SDK de Kotlin aún no admite oyentes de progreso para la sincronización flexible.

You can monitor the upload and download progress of a sync session. The sync session starts when you open a synced realm. For more information, refer to Manage a Sync Session.

To monitor Sync upload and download progress, call SyncSession.progressAsFlow()

This method returns a Flow of Progress events. Progress provides the total number of transferrable bytes and the remaining bytes to be transferred.

syncSession.progressAsFlow() toma dos argumentos:

  • A Direction enum that can be set to UPLOAD or DOWNLOAD. This specifies that the progress stream tracks uploads or downloads.

  • Un enum ProgressMode que puede configurarse como:

    • INDEFINITELY: Sets notifications to continue until the callback is unregistered.

    • CURRENT_CHANGES: Establece que las notificaciones continúen hasta que solo se sincronicen los bytes actualmente transferibles.

val stream = realm.syncSession.progressAsFlow(
Direction.UPLOAD, ProgressMode.CURRENT_CHANGES
)
stream.collect { progress ->
if (progress.transferableBytes == progress.transferredBytes) {
Log.i("Upload complete")
}
}

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 1.9.0 o superior del SDK de Realm Kotlin.

Migrating enables you to keep your existing App Services users and authentication configuration. Flexible Sync provides more versatile permissions configuration options and more granular data synchronization.

For more information about how to migrate your App Services App from Partition-Based Sync to Flexible Sync, refer to Migrate Device Sync Modes.

The automatic migration from Partition-Based Sync to Flexible Sync does not require any changes to your client code. However, to support this functionality, Realm automatically handles the differences between the two Sync Modes by:

  • Automatically creating Flexible Sync subscriptions for each object type where partitionKey == partitionValue.

  • Inyectar un campo partitionKey en cada objeto si aún no existe uno. Esto es necesario para la suscripción automática de Flexible Sync.

Si necesitas realizar actualizaciones en el código cliente después de la migración, considera actualizar tu base de código cliente para remover funcionalidades ocultas de migración. Tal vez quieras actualizar tu base de código de cliente cuando:

  • Agregue un nuevo modelo o cambie un modelo en su base de código de cliente.

  • You add or change functionality that involves reading or writing Realm objects

  • Quieres implementar un control más específico sobre los datos que sincronizas

Make these changes to convert your Partition-Based Sync client code to use Flexible Sync:

  • Actualice su SyncConfiguration.Builder() para usar la sincronización flexible. Esto implica eliminar el partitionValue y agregar un conjunto de suscripciones iniciales, si es necesario.

  • Agrega propiedades relevantes a tus modelos de objetos para usarlas en tus suscripciones de Flexible Sync. Por ejemplo, podrías agregar una propiedad ownerId para permitir que un usuario sincronice solo sus propios datos.

  • Remove automatic Flexible Sync subscriptions and manually create the relevant subscriptions.

For examples of Flexible Sync permissions strategies, including examples of how to model data for these strategies, refer to Device Sync Permissions Guide.

When you migrate from Partition-Based Sync to Flexible Sync, Realm automatically creates hidden Flexible Sync subscriptions for your app. The next time you add or change subscriptions, we recommend that you:

  1. Remove the automatically-generated subscriptions.

  2. Subscribe to queries or Manually add the relevant subscriptions in your client codebase.

Esto le permite ver toda su lógica de suscripción junta en su base de código para futuras iteraciones y depuraciones.

For more information about the automatically-generated Flexible Sync subscriptions, refer to Migrate Client App to Flexible Sync.

Volver

Sync Data in the Background

En esta página