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 }
  ]
}

また、すべてのページを反復処理するためlimitのパラメーターを使用する可能性を追加します。offset

Paginationという名前の章があり、無料の電子書籍Web API Designにパーシャル レスポンスが記載されています。

その本を読むことをお勧めします。30ページしかありません。

upd : あなたの場合、mongoid のメソッドを使用して結果をページ分割することができlimitますskip

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 に答える