Device Sync - Flutter SDK
項目一覧
Device Sync は、クライアント アプリケーションと Atlas App Services バックエンド アプリケーションとの間でデータを自動的に同期します。 When a client device is online, Sync asynchronously synchronizes data in the background between the device and your App Services backend.
Flutter SDK は Flexible Sync のみをサポートしています。 Flexible Sync を使用するように App Services バックエンドを構成する必要があります。
注意
Flutter SDK はパーティションベースの同期 をサポートしていません。
同期された Realm
Realm を構成して、それぞれがデータのローカル コピーを持つ多数のデバイス間でデータを自動的に同期できます。 同期された Realm はローカル専用の Realm とは異なる構成を使用するため、同期プロセスを処理するには Atlas App Services バックエンド が必要です。
アプリケーションは、オフラインでも、ローカルで同期された Realm オブジェクトをいつでも作成、変更、削除できます。 ネットワーク接続が利用可能になるたびに、Realm Flutter SDK はアプリケーション サーバーへの接続を開き、他のクライアントとの間での変更を同期します。 Atlas Device Sync プロトコルとサーバー側の運用変換により、特定の変更がオフラインで発生したり、正しい順序で受信されなかった場合でも、Realm の完全に同期されたすべてのインスタンスが完全に同じデータを参照することが保証されます。
同期された Realm と同期されていない Realm
同期された Realm と同期されていないローカル Realm とはいくつかの違いがあります。
同期された Realm ではバックエンドの App Services Appと変更が同期されようとしますが、同期されていない Realm では変更が同期されません。
同期された Realm には認証済みユーザーがアクセスできますが、同期されていない Realm にはユーザーや認証の概念がありません。
同期されていない Realm から同期された Realm に、またはその逆にデータをコピーすることはできますが、同期されていない Realm を同期することはできません。 同期されていない Realm を同期された Realm に変換するには、「ローカル専用アプリの同期可能なアプリへの移行 」で説明されているプロセスに従います。
Flexible Sync とは
App Services バックエンド構成にFlexible Syncを選択する場合、クライアント実装には クエリ可能なフィールドをクエリするためのサブスクリプションが含まれている必要があります。 Flexible Sync は、クライアント アプリケーションで維持するクエリ サブスクリプションに一致するデータを同期することで機能します。
サブスクライブセットには、一連のクエリが含まれます。 Flexible Sync はそれらのクエリに一致するドキュメントを返します。ここでは、ユーザーにはドキュメントを読み取りまたは書き込みするための適切な権限があります。 ドキュメントがクエリに一致するが、クライアントにドキュメントを読み取りまたは書き込みする権限がない場合、それらはクライアント アプリケーションに同期されません。
Flexible Syncの限定されたサブセットを使用して、RQL クエリを作成できます。クエリ可能なフィールドの詳細については、「 クエリ可能なフィールド 」のドキュメントを参照してください。
サブスクリプション セットは、特定のタイプのRealm オブジェクトに基づいています。 多くのタイプの Realm オブジェクトのデータを同期するには、複数のサブスクライブが必要です。
クライアント アプリケーションで Device Sync を使用するには、Flexible Sync 構成で同期された Realm を開きます。 次に、サブスクリプションを管理して、同期するドキュメントを決定します。
バックエンドでの Flexible Sync の有効化
SDK を使用してクライアント アプリケーションからデータの同期を開始する前に、App Services バックエンドで Flexible Sync を有効にする必要があります。
パフォーマンス向上のためのグループ更新
サブスクリプションセットのすべての書込みトランザクション (write transaction) にはパフォーマンス コストがかかります。 セッション中に Realm オブジェクトを複数更新する必要がある場合は、すべての変更が完了するまで編集されたオブジェクトをメモリ内に保持することを検討してください。 これにより、すべての変更ではなく、完全で更新されたオブジェクトのみが Realm に書き込まれるため、同期のパフォーマンスが向上します。
Device Sync の仕組み
Device Sync は、Realm のすべての機能に加えて、App Services バックエンドとクライアント デバイス間のネットワーク同期を追加します。 同期とともに Realm を使用する場合、同期なしで Realm を使用する場合と同様に、デバイス上に Realm が存在します。 ただし、これらの Realm に保存されているデータに対する変更は、バックエンドの App Services インスタンスを介してすべてのクライアント デバイス間で同期されます。 そのバックエンドは、MongoDB を実行しているクラウドベースの Atlas クラスターに Realm データも保存します。
Device Sync は、アプリケーション内の専用スレッドでアプリケーション バックエンドと通信するワーカー クライアントに依存しています。 さらに、同期された Realm には、含まれているオブジェクトに対する変更の履歴が保持されます。 Sync はこの履歴を使用して、クライアント変更とバックエンド変更の間の競合を解決します。
Device Syncを使用するアプリケーションは、JSON スキーマを使用してバックエンドでスキーマを定義する{ 。データを同期するには、クライアント アプリケーションがそのバックエンドスキーマと一致する必要があります。ただし、 アプリケーションの プログラミング言語で初期スキーマを定義する場合は、アプリケーションを書き込む 際に 開発モード を使用してネイティブ SDK オブジェクトに基づいてバックエンドJSONスキーマを作成できます。ただし、アプリケーションを本番環境で使用する場合は、バックエンドでJSON schema を使用してスキーマを変更する必要があります。