2

Elasticsearchの Ruby ラッパーとしてTireを使用しています。私の問題は、100,000 個のドキュメントをメモリにロードし、それらに対してある種の複雑な計算を行う必要があることです。現在の手順は次のようになります。

  1. すべてのドキュメントを読み込む
  2. Computation.new(all_documents)
  3. すべてのドキュメントを繰り返して呼び出すcomputation.calc(document)

この戦略は 100,000 ドキュメントでは機能しません。マシンのメモリ制限にすぐに達するからです。ドキュメント (JSON) は Tire オブジェクトに読み込まれ、Ruby ハッシュに変換されます。

このスケールを作るにはどうすればよいですか?私は次のことを考えましたが、a) 実装するのが良いかどうか、b) 最善の解決策であるかどうかはわかりません。

  1. 演算オブジェクトの初期化c = Computation.new
  2. mドキュメントを読み込む
  3. c.preprocess(documents)
  4. すべてのドキュメントが前処理されるまで、手順 2 と 3 を繰り返します。
  5. mドキュメントを読み込む
  6. mドキュメントを繰り返す
  7. c.calc(document)
  8. すべてのドキュメントが処理されるまで、手順 6 と 7 を繰り返します。

また、GC の観点からは、これがどのように機能するかわかりません。

4

1 に答える 1