パーティションベースの同期 - React Native SDK
項目一覧
パーティションベースの同期は、Realm React Native SDKでAtlas Device Syncを使用するための古いモードです。 新しいアプリにはFlexible Syncを使用することをお勧めします。 このページの情報は、パーティションベースの同期を引き続き使用しているユーザー向けです。
パーティションベースの同期 と Atlas App Services でのパーティションベースの同期の詳細については、App Services ドキュメントの「 パーティションベースの同期 」を参照してください。
パーティション値
バックエンド アプリ構成にパーティションベースの同期を選択する場合、クライアント実装にはパーティション値を含める必要があります。 これは、 Flexible Sync を設定するときに選択したパーティションキーフィールドの値です。
パーティション値によって、クライアント アプリケーションがアクセスできるデータが決まります。
同期された Realm を開くときに、パーティション値を渡します。
パーティションベースの同期Realmの構成
Flexible Sync レルムを開くには、 @realm/react
のcreateRealmContext()
関数とその返されたRealmProvider
を使用します。
UserProvider
にネストされているRealmProvider
に、 flexible: true
を含むSyncConfigurationオブジェクトを持つsync
プロパティを追加します。
UserProvider
は認証されたユーザーをRealmProvider
に自動的に渡すことに注意してください。
<RealmProvider schema={[YourObjectModel]} sync={{ partitionValue: 'testPartition', }}> <RestOfApp /> </RealmProvider>
データのコピーと新しい Realm のオープン
バージョンrealm@10.14.0
の新機能。
既存の Realm から異なる構成オプションを持つ新しい Realm にデータをコピーするには、新しい構成をRealm.writeCopyTo() 使用して複数のドキュメントを挿入できます。
注意
同じタイプの同期のみ
このメソッドは、別のパーティションベースの同期ユーザーのパーティションベースの同期構成、または別の Flexible Sync ユーザーの Flexible Sync 構成のコピーのみをサポートします。 このメソッドを使用して、 パーティションベースの同期 Realm と Flexible Sync レルムの間で、またはその逆に変換することはできません。
新しいRealmの構成で、 path
を指定する必要があります。
コピーした Realm をすでに存在する Realm ファイルに書込むと、データはオブジェクトごとに書込まれます。 特定のプライマリキーのオブジェクトがすでに存在する場合は、コピー操作により、 オブジェクトが置き換えられます。 コピー操作を成功させるには、コピーする Realm と書き込み先の Realm のスキーマと互換性がある必要があります。 両方の構成のスキーマ内のオブジェクトのみがコピーされます。
構成の変更には、 SyncConfigurationの変更を含めることができます。
ローカルRealm から同期されたRealm
同期された Realm からローカル Realm への同期
構成の変更には、 Configuration
のencryptionKey
プロパティに対する変更も含めることができます。
暗号化されたRealmから暗号化されていないRealmへ
暗号化されていない Realm から暗号化された Realm へ
例
ローカル Realm の同期された Realm への変換
const localConfig = { schema: [Car], path: "localOnly.realm", }; const localRealm = await Realm.open(localConfig); const syncedConfig = { schema: [Car], path: "copyLocalToSynced.realm", sync: { user: app.currentUser, partitionValue: "myPartition", }, }; localRealm.writeCopyTo(syncedConfig); const syncedRealm = await Realm.open(syncedConfig);
const localConfig: Realm.Configuration = { schema: [Car], path: "localOnly.realm", }; const localRealm = await Realm.open(localConfig); const syncedConfig: Realm.Configuration = { schema: [Car], path: "copyLocalToSynced.realm", sync: { user: app.currentUser!, partitionValue: "myPartition", }, }; localRealm.writeCopyTo(syncedConfig); const syncedRealm = await Realm.open(syncedConfig);
構成の変更を組み合わせることもできます。 たとえば、ローカル暗号化された Realm を同期された暗号化されていない Realm として開くことも、暗号化されていない同期された Realm を暗号化された同期 Realm として開くこともできます。
例
同期された暗号化のローカルの暗号化されていない Realm への変換
// Create a secure key. const encryptionKey = new Int8Array(64); // ... store key const syncedEncryptedConfig = { schema: [Car], path: "syncedEncrypted.realm", sync: { user: app.currentUser, partitionValue: "myPartition", }, encryptionKey, }; const syncedEncryptedRealm = await Realm.open(syncedEncryptedConfig); const localUnencryptedConfig = { schema: [Car], path: "copyLocalUnencrypted.realm", }; syncedEncryptedRealm.writeCopyTo(localUnencryptedConfig); const localUnencryptedRealm = await Realm.open(syncedEncryptedConfig);
// Create a secure key. const encryptionKey = new Int8Array(64); // ... store key const syncedEncryptedConfig: Realm.Configuration = { schema: [Car], path: "syncedEncrypted.realm", sync: { user: app.currentUser!, partitionValue: "myPartition", }, encryptionKey, }; const syncedEncryptedRealm = await Realm.open(syncedEncryptedConfig); const localUnencryptedConfig: Realm.Configuration = { schema: [Car], path: "copyLocalUnencrypted.realm", }; syncedEncryptedRealm.writeCopyTo(localUnencryptedConfig); const localUnencryptedRealm = await Realm.open(syncedEncryptedConfig);
パーティションベースの同期から Flexible Sync への移行
App Services Device Sync モードを、パーティションベースの同期から Flexible Sync に移行できます。 移行は自動プロセスであり、アプリケーション コードを変更する必要はありません。 自動移行には、Realm Node.js SDK バージョン 11.10.0 以降が必要です。
移行により、既存の App Services ユーザーと認証構成を維持できます。 Flexible Sync は、より多目的の権限構成オプションとよりきめの細かいデータ同期を提供します。
App Services App をパーティションベースの同期から Flexible Sync に移行する方法の詳細については、「 Device Sync モードの移行 」を参照してください。
移行後のクライアント コードの更新
パーティションベースの同期から Flexible Sync への自動移行には、クライアント コードを変更する必要はありません。 ただし、この機能をサポートするために、Realm は 2 つの同期モード間の違いを次の方法で自動的に処理します。
partitionKey == partitionValue
の各オブジェクトタイプの Flexible Sync サブスクリプションを自動的に作成します。すべてのオブジェクトに
partitionKey
フィールドを挿入します(フィールドがまだ存在しない場合)。 これは自動 Flexible Sync サブスクライブに必要です。
If you need to make updates to your client code after migration, consider updating your client codebase to remove hidden migration functionality. 次の場合には、クライアント コードベースを更新する必要がある場合があります。
クライアント コードベースで新しいモデルを追加または変更する
Realm オブジェクトの読み取りまたは書き込みを含む機能を追加または変更する場合
同期するデータの内容をより詳細に制御する機能を実装したい
Flexible Sync を使用するようにパーティションベースの同期クライアント コードを変換するには、次の変更を行います。
同期された Realm を開くSyncConfigurationオブジェクトに
flexible:true
を追加します。Flexible Sync サブスクライブで使用する関連プロパティをオブジェクトモデルに追加します。 たとえば、ユーザーが自分のデータのみを同期できるようにするには、
ownerId
プロパティを追加します。自動 Flexible Sync サブスクライブを削除し、関連するサブスクライブを手動で作成します。
これらの戦略にデータをモデル化する方法の例を含む、Flexible Sync 権限戦略の例については、 Device Sync 権限ガイド を参照してください。
サブスクリプションの削除と手動作成
パーティションベースの同期から Flexible Sync に移行すると、Realm はアプリ用の非表示の Flexible Sync サブスクリプションを自動的に作成します。 次回サブスクリプションを追加または変更するときは、次の操作を行うことをお勧めします。
これにより、将来の反復やデバッグのために、すべてのサブスクライブ ロジックをコードベースにまとめて表示できます。
自動生成される Flexible Sync サブスクライブの詳細については、「クライアント アプリの Flexible Sync への移行 」を参照してください。