Docs Menu
Docs Home
/ /
Atlas Device SDK
/ /

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

項目一覧

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

バージョン 1.10.0 の新機能

MongoDB Atlas にストリーミングしたい大量のデータを生成するモバイルまたはクライアント アプリケーションがある場合は、Device Sync を使用してデータを一方向に同期できます。 この一方向同期を可能にする機能をData Ingestと呼びます。

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

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

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

Data Ingest にはFlexible Sync が必要です。

Kotlin SDK は、Data Ingest で使用する特殊なタイプの Realm オブジェクト(非対称オブジェクト)を提供します。

非対称オブジェクトは、いくつかの例外を除いて、 RealmObjectと同じプロパティタイプをほぼサポートしています。

  • 非対称オブジェクトは、 Flexible Sync で構成された同期された Realm でのみ使用できます。 ただし、非対称オブジェクトへのサブスクリプションは作成できません。

  • AsymmetricRealmObjectにはEmbeddedRealmObject型を含めることができますが、 RealmObject型やその他のAsymmetricRealmObject型を含めることはできません。

  • AsymmetricRealmObject 型は、他の Realm オブジェクトのプロパティとして使用することはできません

さらに、非対称オブジェクトは他の Realm オブジェクトと同じように機能しません。 Realm から非対称オブジェクトを追加、読み取り、更新、または削除することはできません。 非対称オブジェクトのみを作成できます。その後、Device Sync でアプリにリンクされた Atlas データベースに一方向に同期します。 Realm は同期後にこのオブジェクトを削除します。

Tip

同じ Realm 内の非対称オブジェクトと非対称オブジェクト

Kotlin SDK を使用すると、同じ Realm 内で非対称オブジェクトと非対称 Realm オブジェクト( RealmObjectEmbeddedRealmObjectタイプ)を操作できます。 Realm を開くときに、Sync 構成にすべてのオブジェクトを含めます。 ただし、非対称オブジェクトをサブスクライブすることはできません

1

そのオブジェクトがAsymmetricRealmObjectである場合は、データを一方向に同期できます。 A対称RealmObject インターフェースを実装して非対称オブジェクトを定義します。

// Implements the `AsymmetricRealmObject` interface
class WeatherSensor : AsymmetricRealmObject {
@PersistedName("_id")
@PrimaryKey
var id: ObjectId = ObjectId()
var deviceId: String = ""
var temperatureInFarenheit: Float = 0.0F
var barometricPressureInHg: Float = 0.0F
var windSpeedInMph: Int = 0
}
2

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

val app = App.create(YOUR_APP_ID)
val user = app.login(credentials)

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

3

認証済みユーザーが作成されたら、 SyncConfigurationを使用して同期された Realm を開くことができます。 同期するAsymmetricRealmObjectタイプを指定します。

val config = SyncConfiguration.create(user, setOf(WeatherSensor::class))
val realm = Realm.open(config)
Log.v("Successfully opened realm: ${realm.configuration.name}")

双方向同期とは異なり、Data Ingest はFlexible Sync サブスクリプションを使用しません。 同じレルムに非対称オブジェクトがある場合は、それらのオブジェクトのみに Flexible Sync サブスクライブ クエリを追加できます。

4

Realm が開いたら、 insert()拡張メソッドを使用して、書込みトランザクション内にAsymmetricRealmObjectを作成できます。

// Open a write transaction
realm.write {
// Create a new asymmetric object
val weatherSensor = WeatherSensor().apply {
deviceId = "WX1278UIT"
temperatureInFarenheit = 6.7F
barometricPressureInHg = 29.65F
windSpeedInMph = 2
}
// Insert the object into the realm with the insert() extension method
insert(weatherSensor)
// WeatherSensor object is inserted into the realm, then synced to the
// App Services backend. You CANNOT access the object locally because it's
// deleted from the local realm after sync is complete.
}

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

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

戻る

クライアント ログ レベルの設定