簡體   English   中英

優化Rails動態JSON CPU /內存密集型操作(緩存?)

[英]Optimising Rails dynamic JSON CPU/memory intensive operations (caching?)

我們建立了一個帶有Angular前端和RoR后端的動態問卷。 由於要處理的動態部件很多,因此無法利用ActionView或jbuilder緩存幫助器。 對於每個“問卷”請求,都有很多查詢需要完成,例如檢查答案的有效性,檢查依賴項等。是否有建議的策略來緩存動態JSON響應?

給一個想法

控制器代碼:

def advance
  # Decrypt and parse parameters
  request = JSON.parse(decrypt(params[:request]))

  # Process passed parameters
  if request.key?('section_index')
    @result_set.start_section(request['section_index'].to_i)
  elsif request.key?('question_id')
    if valid_answer?(request['question_id'], request['answer_id'])
      @result_set.add_answer(request['question_id'],
                             request['answer_id'],
                             request['started_at'],
                             request['completed_at'])
    else
      return invalid_answer
    end
  end

  render_item(@result_set.next_item)
end

next_item可以是問題或部分,但進度指示器數據以及可能先前給出的答案(可以導航)也將返回。 而且,數據是從前端加密發送到前端的。

我們還建立了一個具有Angular前端的管理區域。 在該區域中,可以查看和比較調查表的結果。 正在進行一些查詢以找到子問題,可比較的問題等。我們發現這些問題很難緩存。 在同時單擊多個用戶后,您可以填滿服務器的內存。

該應用程序已部署在Passenger上,我們已經根據服務器配置對配置進行了微調。 結果存儲在Postgres數據庫中。

TLDR:在生產中,我們發現內存使用成為問題。 可以對查詢進行一些優化(特別是包括在內),但是是否存在建議的策略來緩存動態JSON響應?

沒有太多關於如何存儲和檢索數據的細節,這有點困難。 但是聽起來您在說的是,您的next_item方法需要占用大量CPU和內存,才能查找下一項。 那是對的嗎? 假設您想看一下鏈表 每個節點(多態)將具有到下一個節點的鏈接。 如果需要前進和后退,可以將其實現為雙向鏈接列表。

數據多久更改一次? 如果您可以緩存其中的大部分內容,並且會找到一個觸發器屬性(例如updated_at ),則可以在視圖中進行片段緩存。 甚至更好的是在控制器中進行HTTP緩存。 您可以將兩者混合使用。

這有點復雜。 請查看http://www.xyzpub.com/en/ruby-on-rails/4.0/caching.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM