Overview
Nuevo en la versión 10.29.0.
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.
Sincronizar datos unidireccionalmente desde una aplicación cliente
Definir un objeto asimétrico
Puede sincronizar datos unidireccionalmente cuando ese objeto es un AsymmetricObject. Defina un AsymmetricObject derivando de AsymmetricObject:
class WeatherSensor: AsymmetricObject { (primaryKey: true) var _id: ObjectId var deviceId: String var temperatureInFahrenheit: Float var barometricPressureInHg: Float var windSpeedInMph: Int }
Para obtener más información sobre cómo definir AsymmetricObject un, consulte: Definir un AsymmetricObject.
Conectarse y autenticarse con una aplicación de servicios de aplicaciones
Para transmitir datos desde el cliente a su aplicación backend, debe conectarse a un backend de App Services y autenticar a un usuario.
let app = App(id: INSERT_APP_ID_HERE) do { let user = try await login() await openSyncedRealm(user: user) } catch { print("Error logging in: \(error.localizedDescription)") } func login() async throws -> User { let user = try await app.login(credentials: .anonymous) return user }
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.
Abrir un reino
Una vez que tenga un usuario autenticado, puede abrir un dominio sincronizado mediante flexibleSyncConfiguration(). Especifique los AsymmetricObject tipos que desea sincronizar.
func openSyncedRealm(user: User) async { do { var asymmetricConfig = user.flexibleSyncConfiguration() asymmetricConfig.objectTypes = [WeatherSensor.self] let asymmetricRealm = try await Realm(configuration: asymmetricConfig) await useRealm(asymmetricRealm, user) } catch { print("Error opening realm: \(error.localizedDescription)") } }
A diferencia de la sincronización bidireccional, la ingesta de datos no utiliza una suscripción de sincronización flexible.
Nota
Dominios sincronizados y no sincronizados mixtos en proyectos
El AsymmetricObject tipo es incompatible con dominios no sincronizados. Si su proyecto utiliza un dominio sincronizado y uno no sincronizado, debe pasar explícitamente un subconjunto de clases en la configuración del dominio para excluir el tipo del AsymmetricObject dominio no sincronizado.
El descubrimiento automático de esquemas significa que abrir un reino no sincronizado sin excluir específicamente AsymmetricObject de la configuración puede generar un error relacionado con el intento de usar un tipo de objeto incompatible.
Crear objetos asimétricos
Una vez que tenga un reino abierto, puede crear un AsymmetricObject dentro de una transacción de escritura usando create(_ type:, value:).
func useRealm(_ asymmetricRealm: Realm, _ user: User) async { try! asymmetricRealm.write { asymmetricRealm.create(WeatherSensor.self, value: [ "_id": ObjectId.generate(), "deviceId": "WX1278UIT", "temperatureInFahrenheit": 66.7, "barometricPressureInHg": 29.65, "windSpeedInMph": 2 ]) } }
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.