Docs Menu
Docs Home
/ /
Sincronizar datos del dispositivo

Transmisión de datos a Atlas - SDK de Kotlin

Nuevo en la versión 1.10.0.

Si tiene una aplicación móvil o cliente que genera un gran volumen de datos y desea transmitirlos a MongoDB Atlas, puede sincronizar los datos unidireccionalmente mediante Sincronización de Dispositivos. Esta función se denomina Ingesta de Datos.

Puedes utilizar Ingesta de datos para transmitir datos desde la aplicación cliente a una aplicación Atlas App Services habilitada para Flexible Sync.

Es posible que desee sincronizar datos unidireccionalmente en aplicaciones de IoT, como un sensor meteorológico que envía datos a la nube. La ingesta de datos también es útil para escribir otros tipos de datos inmutables donde no se requiere resolución de conflictos, como la creación de facturas desde una aplicación de comercio electrónico o el registro de eventos de la aplicación.

La ingesta de datos está optimizada para proporcionar mejoras de rendimiento para cargas de trabajo pesadas de solo inserción del lado del cliente.

La ingesta dedatos requiere sincronización flexible.

El SDK de Kotlin proporciona un tipo especial de objeto Realm para usar con la ingesta de datos: un objeto asimétrico.

Los objetos asimétricos admiten ampliamente los mismos tipos de propiedades que RealmObject, con algunas excepciones:

  • Los objetos asimétricos solo se pueden usar en dominios sincronizados configurados con Sincronización Flexible. Sin embargo, no se pueden crear suscripciones a objetos asimétricos.

  • Un AsymmetricRealmObject puede contener EmbeddedRealmObject tipos, pero no puede contener RealmObject tipos u otros AsymmetricRealmObject tipos.

  • AsymmetricRealmObject Los tipos no se pueden utilizar como propiedades en otros objetos de Realm.

Además, los objetos asimétricos no funcionan igual que otros objetos de Realm. No se puede agregar, leer, actualizar ni eliminar un objeto asimétrico del reino. Solo se puede crear un objeto asimétrico, que se sincroniza unidireccionalmente con la base de datos Atlas vinculada a la aplicación mediante Device Sync. Realm elimina este objeto después de la sincronización.

Tip

Objetos asimétricos y no asimétricos en el mismo ámbito

El SDK de Kotlin permite trabajar con objetos asimétricos y no asimétricos de Realm (tiposRealmObject EmbeddedRealmObject y) dentro del mismo realm. Incluya todos los objetos en la configuración de sincronización al abrir el realm. Sin embargo,no puede suscribirse a los objetos asimétricos.

1

Puedes sincronizar datos unidireccionalmente cuando ese objeto es AsymmetricRealmObject un. Define un objeto asimétrico implementando la interfaz AsymmetricRealmObject:

// Implements the `AsymmetricRealmObject` interface
class WeatherSensor : AsymmetricRealmObject {
@PersistedName("_id")
@PrimaryKey
var id: ObjectId = ObjectId()
var deviceId: String = ""
var temperatureInFarenheit: Float = 0.0F
var barometricPressureInHg: Float = 0.0F
var windSpeedInMph: Int = 0
}
2

Para transmitir datos desde el cliente a su aplicación backend, debe conectarse a un backend de App Services y autenticar a un usuario.

val app = App.create(YOUR_APP_ID)
val user = app.login(credentials)

La ingesta de datos es una función de Flexible Sync, por lo que la aplicación a la que te conectas debe usar Flexible Sync.

3

Una vez que tenga un usuario autenticado, puede abrir un dominio sincronizado mediante una configuración de sincronización. Especifique los AsymmetricRealmObject tipos que desea sincronizar.

val config = SyncConfiguration.create(user, setOf(WeatherSensor::class))
val realm = Realm.open(config)
Log.v("Successfully opened realm: ${realm.configuration.name}")

A diferencia de la sincronización bidireccional, la ingesta de datos no utiliza una suscripción de sincronización flexible. Si tiene objetos no asimétricos en el mismo dominio, puede agregar una consulta de suscripción de sincronización flexible solo para esos objetos.

4

Una vez que tenga un reino abierto, puede crear un AsymmetricRealmObject dentro de una transacción de escritura utilizando el método de extensión insert():

// Open a write transaction
realm.write {
// Create a new asymmetric object
val weatherSensor = WeatherSensor().apply {
deviceId = "WX1278UIT"
temperatureInFarenheit = 6.7F
barometricPressureInHg = 29.65F
windSpeedInMph = 2
}
// Insert the object into the realm with the insert() extension method
insert(weatherSensor)
// WeatherSensor object is inserted into the realm, then synced to the
// App Services backend. You CANNOT access the object locally because it's
// deleted from the local realm after sync is complete.
}

No se pueden leer estos objetos. Una vez creados, se sincronizan con el backend de App Services y la base de datos Atlas vinculada.

Atlas Device Sync gestiona completamente el ciclo de vida de estos datos. Se mantiene en el dispositivo hasta que la sincronización de Data Ingest se completa y luego se elimina del dispositivo.

Volver

Establecer el nivel de registro del cliente

En esta página