有没有办法以JSON格式呈现大型记录集而不消耗大量内存?例如,我有以下查询:
...
records = Records.where(query)
respond_to do |format|
format.html
format.json { render :json => records.to_json }
end
有时,记录将包含数千个条目,并且JSON严格用于在不使用分页的情况下获取数据,并且此类数据必须适合内存才能返回。 Record
条目还包含很多字段(我使用的是MongoDB / Mongoid),并且必须包含这些字段。
答案 0 :(得分:1)
返回数据库中的每个资源几乎总是一个坏主意。
您可以使用有限的结果集进行回复,并提供总记录数。
例如:
{
total: 503
records: [
{ id: 1 },
{ id: 2 }
]
}
并添加使用limit
和offset
参数迭代所有页面的可能性。
免费电子书Web API Design中有一个名为分页和部分回复的章节描述了它。
我建议你阅读那本书。它只包含30页。
<强> UPD 强>:
在您的情况下,您可以使用limit
和skip
mongoid的方法对结果进行分页。
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