ruby-on-rails - Rails/Heroku 基于磁盘的缓存解决方案?

标签 ruby-on-rails mongodb caching memcached

我构建了一个托管在 Heroku 上的 Rails API。 API 使用 memcached 缓存非常大的序列化对象,以加快 API 响应时间。这很有效,但随着我的 API 获得更多流量,memcached 的成本简直太疯狂了。现在我每月支付 160 美元购买 2.5GB。

是否有一种更具成本效益的基于磁盘的解决方案(当然要牺牲速度)?有没有人尝试过使用 Mongo_Store gem 将 MongoDB 作为 Rails 中的缓存存储? Heroku 上的 SSD MongoDB 的每 GB 价格似乎便宜 3-7 倍。例如,我可以以 240 美元/月的价格获得一个 40GB 的 MongoDB 集群。

现在将 Memcached 与 dalli gem 一起使用的一大优势是我的大型对象被压缩。 MongoDB 会为我执行此操作吗,还是我需要手动执行此操作?

最佳答案

我认为您在这里有几个选择,但最简单的是您可以使用直接的 AWS Elasticache Memcached,它便宜得多(2.78GB 为 64 美元/月,30GB 为 164 美元,更大的实例有更好的性能)比率)。您必须弄清楚如何向安全组授予对 Heroku 应用程序的访问权限,或者通过 EC2 实例代理读取。

更广泛地说,如果您使用 memcached 方面来加快 API 响应时间,那么将序列化对象存储在磁盘上与内存中似乎会大大抵消任何速度优势 - 您是否有其他建议的基准测试?如果不缓存该对象需要多长时间才能生成?即使 SSD 读取也会比 memcached 读取慢一个数量级。

关于ruby-on-rails - Rails/Heroku 基于磁盘的缓存解决方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29830814/

相关文章:

javascript - 如何使用 Mongoose 检查字符串是否与数组的元素匹配

node.js - 如何在没有回调的情况下返回 Mongoose 查询结果

java - 还有什么可以在java中抛出ClassCastException?

http - 如果我为 http 过期设置了遥远的 future 日期,我该如何推送意外更改?

ruby-on-rails - Google for Rails - Google map 使用本地 API javascript

ruby-on-rails - CodePipeline 无法使用 Gemfile 中的 "git"引用拉下私有(private) gem 存储库

ruby-on-rails - rails : running rake task in cron job

ruby-on-rails - 扩展设计以支持 JSON API

mongodb - 使用 pyMongo 创建 ISODate

c# - ConcurrentDictionary 作为静态缓存