0

同じカーソルを使用してオブジェクトを数回反復処理しているため、オブジェクトをメモリに保持する方が高速であると想定しています。

で使用する前にすべてのオブジェクトを配列に入れようとしましたobjects = cursor.to_aが、データがダウンロードされるのを待っている間、呼び出しはそれ以上の計算をブロックし、最終的には遅くなります。

私が考えた別の方法は、計算を行っているときにドキュメントを配列に追加し、その配列を使用してさらに計算を行うことです。これはかなり汚れていて、維持するのが難しいですが。

すでにこれを行っているコードはありますか?

4

3 に答える 3

1

したがって、Mongoid にはこれを行うメソッドが既にあります。クエリごとおよび反復ごとにキャッシュするため、クエリを実行したときにのみデータをメモリに保持するため、ブロックされません。

これはカーソル上の単なる関数であり、次のように呼び出すことができます。

Model.where(:name => "John").cache

詳細はこちら: http://mongoid.org/docs/extras.html

于 2012-04-26T17:22:05.870 に答える
0

使用してみてくださいidentity_map。詳細については、ドキュメントを参照してください: http://mongoid.org/docs/installation/configuration.html

identity_map_enabled (false): true に設定すると、Mongoid はデータベースからロードされたドキュメントを ID によって ID マップに保存するため、同じ作業単位内の同じドキュメントに対する後続のデータベース クエリはデータベースにヒットしません。これは、現時点ではリレーション クエリ専用です。詳細については、ID マップのドキュメントを参照してください。

于 2012-04-26T15:06:23.350 に答える
0

別の方法:id配列にその部分のみを格納します。Mongo::Cursorそれ自体はハッシュではありませんが、私が理解できる限り、結果セットのポインターに似たものです。詳細はこちら: Mongo Docs

于 2012-04-26T15:07:23.310 に答える