保持 Rails 数据从 Websocket 更新而不保存到数据库



我有websocket价格数据流入我的rails api应用程序,我想保持更新,以便任何api请求都能得到更新的响应。将每个更新保存到数据库的成本太高。我该怎么做?在 Ember 中,我可以修改模型并保留下来。这似乎不会发生在轨道上。

通道控制器:

def receive(message)
  #ActionCable.server.broadcast('channel', message)
  platform = Platform.find(params[:id]);
  market = platform.markets.find_by market_name: message["market_name"]
  market.attributes = {
    market.price = message.values["price"],
    etc......
  }
  #market.save [this is too expensive every time]
end

我这样做的方式是否正确?每次我想更新时使用查找似乎效率低下,每秒可能多次。在 Ember 中,我创建了一个记录 Id 查找数组,以便我可以快速匹配market_name,我不知道如何在 rails 中做到这一点。

持久性到某个存储是让其他线程使用最新值响应的唯一方法。

而不是 3 个查询(2 select s 和 1 update),您只需 1 个update即可完成

Market.where(platform_id: params[:id], market_name: message["market_name"]).
       update_all(price: message.values["price"])

使用适当的索引,每次更新可能会具有子毫秒的性能。

根据您的业务需求:

如果您每秒都会获得大量市场更新(使所有先前的更新过时且无用),您可以选择忽略很少的更新,根本不触发更新。

最新更新