Realm ファイル サイズの縮小 - C++ SDK
時間の経過とともに、Realm で使用されるストレージ領域は断片化され、必要以上のスペースを消費する可能性があります。 内部ストレージの範囲を再確認してファイル サイズを縮小するには、Realm ファイルを圧縮する必要があります。
Realm のデフォルトの動作は、Realm ファイルが大きくなりすぎるのを防ぐために、ファイルを自動的に圧縮することです。 自動圧縮がユースケースに十分でない場合は、手動圧縮戦略を使用できます。
自動圧縮
SDK は、ファイル内のデータを継続的に再割り当てし、未使用のファイル領域を排除することで、Realm ファイルをバックグラウンドで自動的に圧縮します。 自動圧縮は、ほとんどのアプリケーションの Realm ファイル サイズを最小限に抑えるのに十分です。
自動圧縮は、ファイル内の未使用領域のサイズがファイル内のユーザー データのサイズの 2 倍を超えると開始されます。 自動圧縮は、ファイルがアクセスされていない場合にのみ行われます。
手動圧縮オプション
手動圧縮は、ファイル サイズをより厳密に管理する必要があるアプリケーションに使用できます。
Realm の手動圧縮は次の方法で機能します。
Realm ファイルの内容全体の読み取り
別の場所にある新しいファイルに内容を書込み (write)
元のファイルの置き換え
ファイルに多くのデータが含まれている場合、コストのかかる操作になる可能性があります。
データベース構成で Should_compact_on_launch()メソッドを使用して、データベースの圧縮を試みます。 次のような、このメソッドを実行するための条件を指定します。
ディスク上のファイルのサイズ
ファイルに含まれる空き領域の量
次の例では、ファイルが 100 MB より大きく、Realm ファイル内のスペースの 50% 以下が使用されている場合に、Realm を圧縮するための条件を設定する方法を示しています。
// Create a database configuration. auto config = realm::db_config(); config.should_compact_on_launch([&](uint64_t totalBytes, uint64_t usedBytes) { // totalBytes refers to the size of the file on disk in bytes (data + free // space). usedBytes refers to the number of bytes used by data in the file // Compact if the file is over 100MB in size and less than 50% 'used' auto oneHundredMB = 100 * 1024 * 1024; return (totalBytes > oneHundredMB) && (usedBytes / totalBytes) < 0.5; }); // The database is compacted on the first open if the configuration block // conditions were met. auto realm = realm::db(config);
Realm を手動で圧縮するためのヒント
Realm を手動で圧縮すると、リソースが集中する操作になる可能性があります。 Realm を開くたびにアプリケーションが圧縮されないようにする必要があります。 代わりに、アプリケーションが圧縮を最適化して、ファイルサイズが大きくなりすぎるのを防ぐのに十分な頻度で圧縮を行います。 アプリケーションがリソースが制限された環境で実行されている場合、一定のファイルサイズに達したときや、ファイルサイズがパフォーマンスに悪影響を及ぼす場合は、圧縮する必要がある場合があります。
これらの推奨事項は、アプリケーションの圧縮の最適化を開始するのに役立ちます。
最大ファイルサイズを、平均 Realm 状態サイズの倍数に設定します。 平均的な Realm 状態サイズが 10 MB の場合は、予想される使用量とデバイスの制約に応じて、最大ファイル サイズを 20 MB または 40 MB に設定できます。
開始点として、Realm ファイルサイズの 50% 以上が使用されなくなった場合に Realm を圧縮します。 現在使用されているバイトを合計ファイルサイズで割った値で、現在使用されているスペースの割合を判断します。 次に、それが 50% 未満であるかどうかを確認します。 つまり、Realm ファイル サイズの 50% 以上が未使用領域であり、圧縮に適しています。 試すと、アプリケーションに最適なパーセンテージが異なることが見つかる場合があります。