2012-11-03 70 views
0

我有一個包含許多嵌入文檔(DataPoint)(1:N關係)的文檔(DataSet)。由於這在數組中顯示爲一個數組,如果我想要讀取每20個元素,例如,它會將每個元素加載到內存中,還是隻加載每20個元素?用ror加載MongoDB/Mongoid嵌入式文檔

我想弄清楚這是否會效率低下。我希望理想情況下只加載我需要的數據庫。

下面是一個例子:

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

這是壞?有沒有一種特定的方式來做到這一點?

回答

1

嵌入文檔不是關係(以典型的RDBMS方式),而是實際上嵌入(因此名稱)在父記錄中,就像任何其他屬性一樣。因此,當您撥打DataSet.first時,您將整個文檔以及其嵌入的記錄加載到內存中。

根據您的應用程序的結構,您可能會看到將每20個DataPoint反向標準化爲單獨的嵌入關係(在回調期間或後臺任務中或類似情況下)的好處,然後在加載文件,加載只有DataSet.only(:datapoints_sample).first這些點 - 這將只加載該關係到內存(並沒有其他屬性)。