Transmitir dados para o Atlas - C++ SDK
Nesta página
Você pode usar aingestão de dados para transmitir dados do aplicação cliente para um Atlas App Services habilitado para Flexible Sync .
Talvez você queira sincronizar dados unidirecionalmente em aplicativos IoT, como um sensor meteorológico que envia dados para a nuvem. O arquivo de dados também é útil para gravar outros tipos de dados imutáveis em que você não exige a resolução de conflitos, como criar faturas a partir de uma aplicação de varejo ou registrar evento de aplicação.
A ingestão de dados é otimizada para fornecer melhorias de desempenho para volumes de trabalho pesados somente de inserção no lado do cliente.
Sincronizar dados unidirecionalmente a partir de um aplicativo do cliente
Definir um objeto assimétrico
Você pode sincronizar dados unidirecionalmente quando declarar o esquema de um objeto como um 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 obter mais informações sobre como definir um REALM_ASYMMETRIC_SCHEMA
, incluindo limitações ao vincular a outros tipos de objeto, consulte: Definir um objeto assimétrico.
Conecte-se e autentique-se com um App Services App
Para transmitir dados do cliente para seu aplicativo de backend, você deve conectar-se a um backend do App Services e autenticar um usuário.
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 um Realm
Após ter um usuário autenticado, você pode abrir um Realm sincronizado utilizando um flexibleSyncConfiguration()
. Ao contrário de abrir um Realm para Tipo de objeto de Realm não assimétricos, ao abrir um Realm para arquivo de dados, você deve especificar os tipos asymmetric_object
que deseja sincronizar.
auto syncConfig = user.flexible_sync_configuration(); auto realm = realm::open<realm::WeatherSensorReading>(syncConfig);
Ao contrário da sincronização bidirecional, o arquivo de dados não usa uma assinatura Flexible Sync.
Dica
Tipo de objeto de Realm mistos e assimétricos
Você não pode ler, query ou excluir um asymmetric_object
de um Realm, portanto, objeto assimétricos são incompatíveis com a Flexible Sync bidirecional ou o uso do Realm local. Você não pode abrir um único Realm sincronizado para managed objeto regulares e objeto assimétricos - você deve usar Realms diferentes para managed esses diferentes Tipo de objeto de Realm.
Criar objetos assimétricos
Após ter um Realm aberto, você pode criar um asymmetric_object
e definir seus valores como faria com um objeto normal. No entanto, você não pode ler ou excluir esses objetos. Depois de criados, eles são sincronizados com o backend do App Services e o reconhecimento de data center vinculado do Atlas.
auto weatherSensorReading = realm::WeatherSensorReading{.deviceId = "WX1278UIT", .temperatureInFahrenheit = 64.7, .windSpeedInMph = 7}; realm.write([&] { realm.add(std::move(weatherSensorReading)); });
O Atlas Device Sync gerencia o ciclo de vida desses dados por completo. Ele é mantido no dispositivo até que a sincronização da ingestão de dados seja concluída e, em seguida, é removido do dispositivo.