lin*_*ndy 9 csv api rest export ruby-on-rails
我目前有一个用于我的项目的API和一个负责将导出文件生成为CSV的服务,存档并将它们存储在云中的某个位置.
由于我的API是用Rails编写的,而我的服务是用纯Ruby编写的,因此我在服务中使用Her gem来与API进行交互.但是我发现我当前的实现性能较差,因为我Model.all在我的服务中执行了操作,这反过来又触发了一个请求,该请求可能包含响应中的太多对象.
我很好奇如何改进这项整个任务.这就是我的想法:
Model.where(page: xxx)从我的服务调用;如果我要使用第一种方法,每页应该检索多少个对象?回复应该有多大?
如果我使用第二种方法,这将给请求带来相当大的开销(我猜API请求不应该花那么长时间),我也想知道这是否真的是API的工作.
我应该遵循什么方法?或者,有什么比我更缺的东西?
您需要通过 ruby 进程传递大量信息,这总是不简单,我认为您不会在这里遗漏任何内容。
如果您决定在 API 级别生成 CSV,那么维护服务会得到什么?您可以完全放弃该服务,因为用 nginx 代理替换您的服务会更好地完成同样的事情(如果您只是从 API 主机流式传输响应)?
如果您决定分页,性能肯定会下降,但没有人能准确告诉您应该分页多少 - 更大的页面会更快并消耗更多内存(通过运行更少的工作程序来降低吞吐量),更小的页面会更慢并且消耗更少的内存,但由于 IO 等待时间而需要更多的工作人员,
确切的数字将取决于你的 API 应用程序、云和基础设施的 IO 响应时间,恐怕没有人能给你一个简单的答案,你可以在不进行压力测试实验的情况下遵循,一旦你设置了压力测试,无论如何你都会得到一些你自己的——比任何人的估计都要好。
一个建议,多写一些关于你的问题、你正在工作的限制等,也许有人可以帮助你提供更彻底的解决方案。出于某种原因,我觉得你真正想要的是一个后台处理器,比如 sidekiq 或延迟作业,或者如果你想要解耦你的应用程序,或者 nginx,则可以通过数据库视图直接将你的服务连接到数据库API 响应的代理,或者什么都没有......但如果没有更多信息,我真的无法判断。
| 归档时间: |
|
| 查看次数: |
294 次 |
| 最近记录: |