Realm ファイル サイズの縮小 - React Native SDK
時間の経過とともに、Realm で使用されるストレージ領域は断片化され、必要以上のスペースを消費する可能性があります。 内部ストレージの範囲を再確認してファイル サイズを縮小するには、Realm ファイルを圧縮する必要があります。
Realm のデフォルトの動作は、Realm ファイルが大きくなりすぎるのを防ぐために、ファイルを自動的に圧縮することです。 自動圧縮がユースケースに十分でない場合は、手動圧縮戦略を使用できます。
自動圧縮
バージョン 11.3.0 の新機能。
SDK は、ファイル内のデータを継続的に再割り当てし、未使用のファイル領域を排除することで、Realm ファイルをバックグラウンドで自動的に圧縮します。 自動圧縮は、ほとんどのアプリケーションの Realm ファイル サイズを最小限に抑えるのに十分です。
自動圧縮は、ファイル内の未使用領域のサイズがファイル内のユーザー データのサイズの 2 倍を超えると開始されます。 自動圧縮は、ファイルがアクセスされていない場合にのみ行われます。
手動圧縮オプション
手動圧縮は、ファイル サイズをより厳密に管理する必要があるアプリケーションや、自動圧縮をサポートしていない古いバージョンの SDK を使用するアプリケーションに使用できます。
Realm では、ファイルの新しい(圧縮)バージョンを作成し、元のファイルを新しく書込まれたファイルに置き換えることで、ファイル サイズを縮小します。 そのため、圧縮するには、元の Realm ファイル サイズと同等の空きストレージ領域が必要です。
Realm が開かれるたびにデータベースを自動的に圧縮するように Realm を構成することも、最初に Realm インスタンスを取得せずにファイルを圧縮することもできます。
Realm 構成ファイル
構成に ShouldCompact関数を指定することで、Realm ファイルを開くたびに Realm ファイルを確認するように Realm を構成できます。 次のコード例は、これを行う方法を示しています。
const shouldCompact = (totalBytes, 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' const oneHundredMB = 100 * 1024 * 1024; return totalBytes > oneHundredMB && usedBytes / totalBytes < 0.5; }; const config = { shouldCompact }; let realm = await Realm.open(config);
Realm. compact() メソッド
あるいは、 compact()メソッドを呼び出すと、最初に Realm のインスタンスを取得せずに Realm ファイルを圧縮することもできます。
const realm = new Realm("my.realm"); realm.compact();
操作が成功した場合、 compact()
メソッドは true を返します。
圧縮コピーの作成
Realm.writeCopyTo() メソッド を使用して、Realm の圧縮された(およびオプションで 暗号化された )コピーを別のファイルの場所に保存できます使用して複数のドキュメントを挿入できます。 宛先ファイルがすでに存在することはできません。
重要
書込みトランザクション内でwriteCopyTo()
を呼び出さないようにします。 書込みトランザクション内で呼び出されると、このメソッドは最新のデータをコピーします。 これには、このメソッドを呼び出す前にトランザクション内で行ったコミットされていない変更が含まれます。
Realm を手動で圧縮するためのヒント
Realm を手動で圧縮すると、リソースが集中する操作になる可能性があります。 Realm を開くたびにアプリケーションが圧縮されないようにする必要があります。 代わりに、アプリケーションが圧縮を最適化して、ファイルサイズが大きくなりすぎるのを防ぐのに十分な頻度で圧縮を行います。 アプリケーションがリソースが制限された環境で実行されている場合、一定のファイルサイズに達したときや、ファイルサイズがパフォーマンスに悪影響を及ぼす場合は、圧縮する必要がある場合があります。
これらの推奨事項は、アプリケーションの圧縮の最適化を開始するのに役立ちます。
最大ファイルサイズを、平均 Realm 状態サイズの倍数に設定します。 平均的な Realm 状態サイズが 10 MB の場合は、予想される使用量とデバイスの制約に応じて、最大ファイル サイズを 20 MB または 40 MB に設定できます。
開始点として、Realm ファイルサイズの 50% 以上が使用されなくなった場合に Realm を圧縮します。 現在使用されているバイトを合計ファイルサイズで割った値で、現在使用されているスペースの割合を判断します。 次に、それが 50% 未満であるかどうかを確認します。 つまり、Realm ファイル サイズの 50% 以上が未使用領域であり、圧縮に適しています。 試すと、アプリケーションに最適なパーセンテージが異なることが見つかる場合があります。
これらの計算は、次のようになります。
// Set a maxFileSize equal to 20MB in bytes const maxFileSize = 20 * 1024 * 1024; /* Check for the realm file size to be greater than the max file size, * and the amount of bytes currently used to be less than 50% of the * total realm file size */ return (totalBytes > (double)maxFileSize) && ((double)usedBytes / totalBytes < 0.5);
アプリケーション内の Realm ファイルを圧縮する頻度の適切なバランスを見つけるために、条件を試してください。