1

有没有办法在不消耗大量内存的情况下以 JSON 格式呈现大型记录集?例如,我有以下查询:

...
records = Records.where(query)
respond_to do |format|
  format.html
  format.json  { render :json => records.to_json }
end

有时记录将包含数千个条目,并且 JSON 严格用于在不使用分页的情况下获取数据,并且此类数据必须适合内存才能返回。一个Record条目还会包含很多字段(我使用的是 MongoDB/Mongoid),并且必须包含这些字段。

4

1 回答 1

1

返回数据库中的每个资源几乎总是一个坏主意。

您可以使用有限的结果集进行响应并提供记录总数。

例如:

{
  total: 503
  records: [
    { id: 1 },
    { id: 2 }
  ]
}

并添加使用limitoffset参数来遍历所有页面的可能性。

免费电子书Web API 设计中有名为Pagination 的章节和部分响应描述了它。

我建议你读那本书。它仅包含 30 页。

upd:在您的情况下,您可以使用limitskipmongoid 的方法对结果进行分页。

records = Records.where(query).limit(params[:limit]).skip(params[:offset])
respond_to do |format|
  format.html
  format.json  { render :json => { total: records.count, records: records }.to_json }
end
于 2013-02-28T06:17:02.283 回答