0

我有一个包含许多嵌入文档(DataPoint)(1:N 关系)的文档(DataSet)。由于这在rails中对我来说是一个数组,例如,如果我想读取每20个元素,它会将每个元素加载到内存中,还是仅每20个元素?

我试图弄清楚这是否效率低下。理想情况下,我只想从数据库中加载我需要的东西。

这是一个例子:

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

这很糟糕吗?有没有一种特殊的方法来做到这一点?

4

1 回答 1

1

嵌入文档不是关系(以典型的 RDBMS 方式),而是实际上嵌入(因此得名)父记录中,就像任何其他属性一样。因此,当您调用 时DataSet.first,您会将整个文档及其嵌入的记录加载到内存中。

根据您的应用程序的结构,您可能会看到将每 20 次非规范化DataPoint为一个单独的嵌入关系(在回调期间,或在后台任务中,或类似的事情),然后当您加载文档时,仅加载那些带有DataSet.only(:datapoints_sample).first- 的点只会将该关系加载到内存中(并且没有其他属性)。

于 2012-11-04T06:45:10.373 回答