0

多くの埋め込みドキュメント (DataPoint) (1:N 関係) を含むドキュメント (DataSet) があります。これはレールでは配列として表示されるため、たとえば 20 番目の要素ごとに読み取りたい場合、すべての要素をメモリにロードしますか、それとも 20 番目の要素ごとにロードしますか?

これが非効率になるかどうかを理解しようとしています。理想的には、必要なものだけを DB からロードしたいと考えています。

次に例を示します。

a = DataSet.first
points = a.data_points.values_at(*(0..a.data_points.count).step(20))

これは悪いですか?これを行うモンゴイド固有の方法はありますか?

4

1 に答える 1

1

埋め込まれたドキュメントは (典型的な RDBMS のように) リレーションではありませんが、他の属性と同様に、実際には親レコード内に埋め込まれています (そのため、この名前が付けられています)。したがって、 を呼び出すとDataSet.first、ドキュメント全体とその埋め込みレコードがメモリに読み込まれます。

DataPointアプリケーションの構造によっては、(コールバック中、またはバックグラウンド タスクなどで) 20 番目ごとに非正規化して別の埋め込みリレーションにすることでメリットが得られる場合があり、ドキュメントをロードするときにそれらのみをロードします。 - を指定すると、そのリレーションのみがメモリにロードされますDataSet.only(:datapoints_sample).first(他の属性はロードされません)。

于 2012-11-04T06:45:10.373 に答える