3

私の Rails アプリケーションでは、ページの読み込みごとにバイナリ ファイル データベースにクエリを実行する必要があります。クエリは読み取り専用です。ファイルサイズは1.4MBです。2 つの質問があります。

File1)オブジェクトをクラス変数にキャッシュするのは理にかなっていますか?

def some_controller_action    
    @@file ||= File.open(filename, 'rb')
    # binary search in @@file
end

2) キャッシュされたオブジェクトは、同じ Rails プロセス内の異なるリクエスト間で共有されますか?

4

2 に答える 2

5

クラスで定数を使用する場合、別名

FILE = File.read(filename, 'rb').read

そのため、アプリケーションのロード時に評価されます。フォークは後で発生するため、共有メモリに配置されます。

于 2012-06-04T10:07:09.803 に答える
2

それは理にかなっています。ただし、これの制限は、アプリに対して複数のプロセスを生成する場合、各プロセスが 1.4 MB をキャッシュする必要があることです。したがって、2 番目の質問に対する答えは「はい」ですが、複数のプロセス間で共有されることはありません。

于 2012-06-04T09:39:43.243 に答える