Elasticsearchの Ruby ラッパーとしてTireを使用しています。私の問題は、100,000 個のドキュメントをメモリにロードし、それらに対してある種の複雑な計算を行う必要があることです。現在の手順は次のようになります。
- すべてのドキュメントを読み込む
Computation.new(all_documents)
- すべてのドキュメントを繰り返して呼び出す
computation.calc(document)
この戦略は 100,000 ドキュメントでは機能しません。マシンのメモリ制限にすぐに達するからです。ドキュメント (JSON) は Tire オブジェクトに読み込まれ、Ruby ハッシュに変換されます。
このスケールを作るにはどうすればよいですか?私は次のことを考えましたが、a) 実装するのが良いかどうか、b) 最善の解決策であるかどうかはわかりません。
- 演算オブジェクトの初期化
c = Computation.new
- mドキュメントを読み込む
c.preprocess(documents)
- すべてのドキュメントが前処理されるまで、手順 2 と 3 を繰り返します。
- mドキュメントを読み込む
- mドキュメントを繰り返す
c.calc(document
)- すべてのドキュメントが処理されるまで、手順 6 と 7 を繰り返します。
また、GC の観点からは、これがどのように機能するかわかりません。