32 GB のサーバーに 4 GB のデータセットがあるとします。
そのすべてを R に読み込み、data.table グローバル変数を作成し、すべての関数でそのグローバルを一種のメモリ内データベースとして使用することができます。ただし、R を終了して再起動すると、ディスクから再度読み取る必要があります。スマート ディスク キャッシュ戦略 (保存/読み込みまたは R.cache) を使用しても、そのデータを取得するのに 10 秒程度の遅延があります。そのデータのコピーには約 4 秒かかります。
Rセッションの終了後も存続するメモリにこれをキャッシュする良い方法はありますか?
RServe、redis/Rredis、Memcache、マルチコア... Shiny-Server と Rstudio-Server にも、この問題を解決する方法があるようです。
しかし、繰り返しになりますが、データを R のメモリ ブロックの外に移動するように見えるので、おそらく data.table がこの機能を提供できるように思えます。これは、データのコピーや再構築などを必要としないという点で理想的です。
アップデート:
より詳細なテストをいくつか実行しましたが、以下のコメントに同意しますが、おそらく文句を言う必要はあまりありません。
しかし、他の人が役に立つかもしれないいくつかの数字をここに示します。私は32GBのサーバーを持っています。4GB サイズの data.table を作成しました。gc() によると、また top を見ると、約 15GB のピーク メモリを使用しているように見え、これにはデータの 1 つのコピーの作成が含まれます。それはかなり良いと思います。
save() でディスクに書き込み、オブジェクトを削除し、load() を使用して再作成しました。これには、それぞれ 17 秒と 10 秒かかりました。
私は R.cache パッケージで同じことをしましたが、これは実際には遅かったです。23秒と14秒。
ただし、これらのリロード時間はどちらも非常に高速です。load() メソッドにより、357 MB/秒の転送速度が得られました。比較すると、コピーには 4.6 秒かかりました。これは仮想サーバーです。ストレージの種類や、読み取り速度がキャッシュによってどの程度影響を受けるかはわかりません。