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 declara el esquema de un objeto como REALM_ASYMMETRIC_SCHEMA.
struct WeatherSensorReading { realm::primary_key<realm::object_id> _id{realm::object_id::generate()}; std::string deviceId; double temperatureInFahrenheit; int64_t windSpeedInMph; }; REALM_ASYMMETRIC_SCHEMA(WeatherSensorReading, _id, deviceId, temperatureInFahrenheit, windSpeedInMph)
Para obtener más información sobre cómo definir REALM_ASYMMETRIC_SCHEMA un, incluidas las limitaciones al vincular a otros tipos de objetos, consulte: Definir un objeto asimétrico.
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.
auto appConfig = realm::App::configuration(); appConfig.app_id = APP_ID; auto app = realm::App(appConfig); auto user = app.login(realm::App::credentials::anonymous()).get();
Abrir un reino
Una vez que tenga un usuario autenticado, puede abrir un dominio sincronizado flexibleSyncConfiguration() con. A diferencia de abrir un dominio para tipos de objetos no asimétricos, al abrir un dominio para la ingesta de datos, debe especificar los asymmetric_object tipos que desea sincronizar.
auto syncConfig = user.flexible_sync_configuration(); auto realm = realm::open<realm::WeatherSensorReading>(syncConfig);
A diferencia de la sincronización bidireccional, la ingesta de datos no utiliza una suscripción de sincronización flexible.
Tip
Tipos de objetos mixtos y asimétricos
No se puede leer, consultar ni eliminar un asymmetric_object de un dominio, por lo que los objetos asimétricos son incompatibles con la sincronización flexible bidireccional ni con el uso de dominios locales. No se puede abrir un único dominio sincronizado para gestionar objetos regulares y asimétricos; se deben usar dominios diferentes para gestionar estos distintos tipos de objetos.
Crear objetos asimétricos
Una vez que tenga un dominio abierto, puede crear un asymmetric_object y establecer sus valores como lo haría con un objeto normal. Sin embargo, no puede leer ni eliminar estos objetos. Una vez creados, se sincronizan con el backend de App Services y la base de datos Atlas vinculada.
auto weatherSensorReading = realm::WeatherSensorReading{.deviceId = "WX1278UIT", .temperatureInFahrenheit = 64.7, .windSpeedInMph = 7}; realm.write([&] { realm.add(std::move(weatherSensorReading)); });
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.