2013-02-28 76 views
1

有沒有辦法以JSON格式呈現大型記錄集而不消耗大量內存?例如,我有以下查詢:在rails中將大型數據庫記錄集呈現爲JSON

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

有時間的記錄將包含成千上萬個條目,而JSON是嚴格用於獲取數據,而無需使用分頁和這樣的數據必須符合內存內要返回它。一個Record條目還將包含很多字段(我正在使用MongoDB/Mongoid),並且有必要包含這些字段。

回答

1

返回數據庫中的每個資源幾乎總是一個壞主意。

您可以使用有限的一組結果進行響應並提供總記錄數。

例如:

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

並添加可能使用limitoffset參數在所有頁面進行迭代。

還有一章名爲分頁和部分回覆在免費電子書Web API Design描述它。

我會建議你閱讀那本書。它只包含30頁。

UPD: 你的情況,你能使用分頁和limitskip 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 
+0

嗯,因爲我在JSON格式分頁形式 – MervS 2013-02-28 06:37:17

+0

爲什麼不返回數據不是我不能用'limit'和'offset'?我已經添加了mongoid解釋 – ck3g 2013-02-28 06:48:54

+0

我的意思是,要求所有匹配記錄必須以純JSON格式顯示。 – MervS 2013-02-28 06:52:24