将数据流式传输到 Atlas - C++ SDK
您可以使用数据导入将数据从客户端应用程序流传输到启用了 Flexible Sync 的Atlas App Services App。
您可能希望在物联网(IoT)应用程序中单向同步数据,例如将数据发送到云的天气传感器。数据导入对于写入不需要冲突解决的其他类型的不可变数据也很有用,例如从零售应用程序创建发票或记录应用程序事件。
数据导入经过优化,可为繁重的客户端仅插入工作负载提供性能改进。
从客户端应用程序单向同步数据
定义非对称对象
将对象的模式声明为 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)
有关如何定义REALM_ASYMMETRIC_SCHEMA
的更多信息,包括链接到其他对象类型时的限制,请参阅:定义非对称对象。
使用 App Services App 连接并进行身份验证
要将数据从客户端流式传输到后端应用程序,您必须连接到 App Services 后端并对用户进行身份验证。
auto appConfig = realm::App::configuration(); appConfig.app_id = APP_ID; auto app = realm::App(appConfig); auto user = app.login(realm::App::credentials::anonymous()).get();
打开 Realm
拥有经过身份验证的用户后,您可以使用flexibleSyncConfiguration()
打开同步 Realm。 与为非不对称对象类型打开 Realm 不同,当您为数据导入打开 Realm 时,您必须指定要同步的asymmetric_object
类型。
auto syncConfig = user.flexible_sync_configuration(); auto realm = realm::open<realm::WeatherSensorReading>(syncConfig);
与双向同步不同,数据导入不使用Flexible Sync 订阅。
提示
混合对象和非对称对象类型
您无法从 Realm 中读取、查询或删除asymmetric_object
,因此非对称对象与双向 Flexible Sync 或本地 Realm 使用不兼容。 您无法打开单个同步域来同时托管常规对象和非对称对象 — 必须使用不同的Realm来托管这些不同的Realm对象类型。
创建非对称对象
拥有开放 Realm 后,您可以创建asymmetric_object
并设置其值,就像设置常规对象一样。 但是,您无法读取或删除这些对象。 创建后,它们会同步到 App Services 后端和链接的 Atlas 数据库。
auto weatherSensorReading = realm::WeatherSensorReading{.deviceId = "WX1278UIT", .temperatureInFahrenheit = 64.7, .windSpeedInMph = 7}; realm.write([&] { realm.add(std::move(weatherSensorReading)); });
Atlas Device Sync 全面管理这些数据的生命周期。它会保留在设备上,直到数据摄入同步完成,然后从设备中删除。