gpt4 book ai didi

ruby-on-rails - 使用缓存或二进制响应加速请求响应

转载 作者:行者123 更新时间:2023-12-04 03:42:19 24 4
gpt4 key购买 nike

我想用缓存二进制响应加快查询响应速度

渲染 5k ~ 100k 条记录的 json 响应需要超过 30 秒 ~ 500 秒

如何让它更快?

因为渲染的响应时间还是很慢

是否可以进行二进制响应(跳过渲染 View )?

  WeatherLog Load (335.5ms)  SELECT  "weather_logs".* FROM "weather_logs"   ORDER BY "weather_logs"."datetime" ASC LIMIT 90000
Write page /Users/public/index.json (35.2ms)
Completed 200 OK in 40488ms (Views: 32459.3ms | ActiveRecord: 336.8ms)

Controller

caches_page :index
respond_to :json

def index
begin
@weather_logs = WeatherLog.result(q)

respond_to do |format|
render json: @weather_logs
return
end
rescue Exception => e
respond_to do |format|
format.json { render json: {status: "Invalid Request #{e.backtrace.first(3)}"} }
end
end
end

数据流:第 4 步是渲染的瓶颈

enter image description here

简而言之

我只需要在短时间内将响应发送给客户端

不管是什么格式。

即使是二进制格式也可以。

请给我一些方向或想法来提高性能

最佳答案

是否肯定只是渲染问题,WeatherLogs.result(q) 的结果是什么。您是否对 WeatherLogs#results 调用进行了基准测试?迭代返回的集合而不是仅仅渲染它需要多长时间?将其呈现为 JSON 时是否调用了任何方法,例如不仅是类字段?

如果确实是呈现问题,您可能需要考虑在将数据插入 WeatherLogs 时使用 LRU 缓存,从本质上对客户端请求的数据进行反规范化。因为,根据您的流量和可能的查询量(尽管这也会影响非规范化数据),它在渲染时生成时几乎永远不会命中缓存。这篇文章可能是一个好的开始:http://oldblog.antirez.com/post/redis-as-LRU-cache.html

但是如果不完全理解为什么渲染需要这么长时间,我不会去构建一个复杂的缓存,如果 JSON 渲染是问题 OJ 可能是一个解决方案或者任何声称最快的库但是我有一个预感问题不在于实际的渲染。

如果您有任何其他问题,我们很乐意提供帮助。

关于ruby-on-rails - 使用缓存或二进制响应加速请求响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26952323/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com