Docs Menu
Docs Home
/ /
Atlas Device SDK
/ /

Realm の構成とオープン - C++ SDK

項目一覧

  • Realm ファイル
  • 移動ファイル
  • 同期された Realm
  • 同期された Realm と同期されていない Realm
  • 非同期 Realm を開く
  • デフォルトのRealmを開きます
  • ファイルパスでの Realm のオープン
  • 同期された Realm を開く
  • HTTP headers同期された を使用する場合にカスタム を設定するRealm
  • Realm へのモデルのサブセットの提供
  • Realm を閉じる

Realmは、Realm 内のデータを整理するために使用される主要データ構造です。 Realm は、アプリケーション内で使用するオブジェクト(Realm オブジェクトと呼ばれる)と、オブジェクトを記述する追加のメタデータのコレクションです。

Realm を開くときは、 db_configを指定する必要があります。 db_configには次のような情報が含まれている場合があります。

  • Realm がデバイスに保存されるオプションのパス

  • Realm が管理するモデルの任意のリスト

  • 実行ループをカスタマイズする必要がある場合は、オプションのスケジューラー

  • Device Sync で Realm を使用する場合はsync_config

Realm ファイルパス、Device Sync 構成、またはその他の構成詳細を指定する必要がない場合は、デフォルトのdb_configコンストラクターを使用できます。

Realm は、Realm 内のすべてのオブジェクトとタイプのバイナリ エンコード バージョンを単一の.realmファイルに保存します。 ファイルは、Realm を開くときに定義できる特定のパスにあります。 を使用してこれらのファイルの内容を開いて表示、編集できます

SDK は、各 Realm に対して追加のファイルを作成します。

  • Realm ファイルの拡張子は「realm」。例: default.realm : オブジェクト データが含まれています。

  • ロックファイル、"lock" の拡張子を持つファイル。例: default.realm.lock : Realm 内のどのバージョンのデータがアクティブに使用されているかを追跡する。 これにより、クライアント アプリケーションによってまだ使用されているストレージ領域が Realm により再利用されるのを防止します。

  • メモ ファイルの拡張子は "note" で、例: default.realm.note : スレッド間通知とプロセス間通知を有効にします。

  • 管理ファイル、"management" で呼び出されるファイル。例: default.realm.management : 内部状態マネジメント。

Realm を構成して、それぞれがデータのローカル コピーを持つ多数のデバイス間でデータを自動的に同期できます。 同期された Realm にはsync_configが必要で、同期プロセスを処理するには Atlas App Services バックエンドが必要です。

アプリケーションは、オフラインでも、ローカルで同期された Realm オブジェクトをいつでも作成、変更、削除できます。 ネットワーク接続が利用可能になるたびに、Realm SDK はアプリケーション サーバーへの接続を開き、他のクライアントとの間での変更を同期します。 Atlas Device Sync プロトコルとサーバー側の運用変換により、特定の変更がオフラインで発生したり、正しい順序で受信されなかった場合でも、Realm の完全に同期されたすべてのインスタンスが完全に同じデータを参照することが保証されます。

同期された Realm と同期されていないローカル Realm とはいくつかの違いがあります。

  • 同期された Realm ではバックエンドの App Services Appと変更が同期されようとしますが、同期されていない Realm では変更が同期されません。

  • 同期された Realm には認証されたユーザーのみがアクセスでき、同期されていない Realm にはユーザーまたは認証の概念がありません。

  • 同期済み Realm を使用すると、Realm を開く前に更新をダウンロードできます。 ただし、Realm を開く前にダウンロードする変更を要求するには、ユーザーがオンラインである必要があります。 同期されていない Realm は、いつでもオフラインで使用できます。

同期されていない Realm から同期された Realm に、またはその逆にデータを手動でコピーすることはできますが、同期されていない Realm は同期できません。

デフォルトのコンストラクターを使用して、現在のディレクトリでRealmを開くことができます。 または、特定のファイルパスを使用してdb_configを構築し、特定の場所でRealmを開くこともできます。

オプション パスを指定せずにRealmを起動すると、現在のディレクトリにデフォルトのRealmが開きます。

Realm を開くと、C++ SDK はプロジェクトで使用可能なモデルを自動的に推測できます。 非対称オブジェクトと一方向にデータを同期するためにRealmを開く場合を除き、使用可能なモデルを手動で指定する必要はありません。 詳細については、このページの「 同期された Realm の開き方 」を参照してください。

auto config = realm::db_config();
auto realm = realm::db(std::move(config));

Tip

Android アプリの作成

Realm C++ SDK を使用する Android アプリを作成する場合は、 db_configコンストラクターのpathパラメーターにfilesDir.pathを渡す必要があります。 詳しくは、「 Android アプリを作成する 」を参照してください。

set_path()を使用して、Realm を開くときに使用するdb_configのパスを指定できます。

auto relative_realm_path_directory = "custom_path_directory/";
std::filesystem::create_directories(relative_realm_path_directory);
// Construct a path
std::filesystem::path path =
std::filesystem::current_path().append(relative_realm_path_directory);
// Add a name for the database file
path = path.append("employee_objects");
// Add the .realm extension
path = path.replace_extension("realm");
// Set the path on the config, and open the database at the path
auto config = realm::db_config();
config.set_path(path);
auto realmInstance = realm::db(std::move(config));

Tip

Android アプリの作成

Realm C++ SDK を使用する Android アプリを作成する場合は、 db_configコンストラクターのpathパラメーターとしてfilesDir.pathを渡す必要があります。 詳しくは、「 Android アプリを作成する 」を参照してください。

デバイス間でデータを同期するには 、Flexible Sync 用に構成し た Atlas App Services App が必要です。

同期された Realm を開くには、次の手順に従います。

  1. Atlas App Services アプリに接続します。

  2. ユーザーを認証します。

  3. 同期構成を作成します。

  4. ユーザーの同期された Realm を 構成で開きます。

// Initialize the App, authenticate a user, and open the database
auto appConfig = realm::App::configuration();
appConfig.app_id = APP_ID;
auto app = realm::App(appConfig);
auto user = app.login(realm::App::credentials::anonymous()).get();
auto syncConfig = user.flexible_sync_configuration();
auto syncedRealm = realm::db(syncConfig);

同期された Realm を開くときは、Realm が管理するモデルをオープン 関数のテンプレート パラメーター リストに渡す必要はありません。 これは、非推奨の文字列 API からの変更です。

このルールの唯一の例外は、同期済み Realm を開き、 asymmetric_object型を同期することです。 同期済み Realm を開き、 asymmetric_object型を同期する場合は、オープン 関数のテンプレート パラメータ リストでオブジェクトを明示的に指定する必要があります。 詳細については、「 Atlas へのデータのストリーム - C++ SDK 」を参照してください。

Tip

Android アプリの作成

Realm C++ SDK を使用する Android アプリを作成する場合は、 db_configコンストラクターのpathパラメーターにfilesDir.pathを渡す必要があります。 詳しくは、「 Android アプリを作成する 」を参照してください。

でカスタム を使用するHTTP headers Device Syncには、アプリ でヘッダーを設定する必要があります。flexible_sync_configuration()

構成を初期化した後、set_custom_http_headers() メンバー関数を使用してカスタムHTTP headersをstringヘッダーキーと値のマップに設定します。

std::map<std::string, std::string> customHeaders;
customHeaders.emplace("CUSTOM_HEADER_NAME", "CUSTOM_HEADER_VALUE");
auto syncConfig = user.flexible_sync_configuration();
syncConfig.set_custom_http_headers(customHeaders);

これで、同期された Realm は、すべての Device Sync ネットワーク リクエストにヘッダーを使用できるようになります。

Tip

低メモリ制約での動作

一部のアプリケーションでは、メモリのフットプリントが厳密に制約されています。 To optimize your realm memory usage for low-memory environments, open the realm with a subset of models.

デフォルトでは、C++ SDK は実行可能にオブジェクト スキーマを持つすべてのオブジェクトタイプをデータベース スキーマに自動的に追加します。

ただし、Realm でモデルのサブセットのみを管理する場合は、 realm::open()関数のテンプレート パラメータ リストに渡すことでモデルを指定できます。

auto config = realm::db_config();
auto realm = realm::open<realm::Dog>(std::move(config));

メモリリークを避けるため、データベースを使用しなくなったらデータベースを閉じます。 データベースを閉じると、残りのオブジェクトは無効になります。 db::close()を使用してデータベースを閉じます。

// Create a database configuration.
auto config = realm::db_config();
auto realm = realm::db(config);
// Use the database...
// ... later, close it.
realm.close();
// You can confirm that the database is closed if needed.
CHECK(realm.is_closed());
// Objects from the database become invalidated when you close the database.
CHECK(specificDog.is_invalidated());

戻る

Realm ファイル