Docs Menu
Docs Home
/ /
Atlas Device SDK
/ /

Atlas へのデータのストリーム - Swift SDK

項目一覧

  • Overview
  • クライアント アプリケーションから一方向にデータを同期
  • 非対称オブジェクトの定義
  • App Services Appによる接続と認証
  • Realm を開く
  • 非対称オブジェクトの作成

バージョン 10.29.0 の新機能

Data Ingestを使用して、クライアント アプリケーションから Flexible Sync が有効化されている Atlas App Services アプリにデータをストリーミングできます。

クラウドにデータを送信する気象センサーなど、IoT アプリケーションでデータを一方向に同期したい場合があります。 Data Ingest は、小売アプリからの請求書作成や、アプリケーション イベントのログ記録など、競合の解決を必要としない他のタイプの不変データを書き込む場合にも役立ちます。

Data Ingest は、クライアント側の挿入専用ワークロードのパフォーマンスを向上させるために最適化されています。

1

そのオブジェクトが AsymmetricObjectである場合は、データを一方向に同期できます。 AsyncMongoDB から派生して非対称オブジェクトを定義します。

class WeatherSensor: AsymmetricObject {
@Persisted(primaryKey: true) var _id: ObjectId
@Persisted var deviceId: String
@Persisted var temperatureInFahrenheit: Float
@Persisted var barometricPressureInHg: Float
@Persisted var windSpeedInMph: Int
}

AsymmetricObjectを定義する方法の詳細については、「非対称オブジェクトの定義 」を参照してください。

2

クライアントからバックエンド アプリにデータをストリーミングするには、App Services バックエンドに接続し、ユーザーを認証する必要があります。

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
}

Data Ingest は Flexible Sync の機能であるため、接続するアプリはFlexible Sync を使用する必要があります。

3

認証されたユーザーを取得したら、 FlexibleSyncConfiguration()を使用して同期された Realm を開くことができます。 同期するAsymmetricObjectタイプを指定します。

@MainActor
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)")
}
}

双方向同期とは異なり、Data Ingest はFlexible Sync サブスクライブを使用しません。

注意

プロジェクトにおける同期された Realm と非同期 Realm

AsymmetricObjectタイプは同期されていない Realm と互換性がありません。 プロジェクトで同期された Realm と同期されていない Realm の両方を使用する場合は、Realm 構成でクラスのサブセットを明示的に渡して、同期されていない Realm からAsymmetricObjectを除外する必要があります。

自動スキーマ検出では、構成からAsymmetricObjectを明示的に除外せずに同期されていない Realm を開くと、互換性のないオブジェクトタイプの使用に関連するエラーがスローされる可能性があります。

4

Realm が開いたら、 create(_ type:, value:)を使用して書き込みトランザクション内にAsymmetricObjectを作成できます。

@MainActor
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
])
}
}

これらのオブジェクトは読み取れません。 作成が完了すると、App Services バックエンドとリンクされた Atlas データベースに同期されます。

Atlas Device Sync は、このデータのライフサイクルを完全に管理します。 Data Ingest 同期が完了するまでデバイス上に保持され、その後デバイスから削除されます。

戻る

Realm イベントの記録