首页 > 解决方案 > Ruby on Rails - 使用日志记录批量插入数据

问题描述

我的应用程序是一个分析应用程序,每秒从多个站点获取实时数据,所有这些都添加到insights表中。

目前,每个数据请求都被发送到log_insight操作并添加到日志文件中,如下所示:

class Insight < ApplicationRecord
  def self.write_log(log_file, log_line)
    File.open(log_file, "a") { |file| file.puts (log_line.gsub("\n", " ")) }
  end
end

class InsightsController < ApplicationController
  def log_insight
    Insight.write_log('log/insights.log', data.to_json)
  end
end

每隔 30 分钟,这些日志就会添加到insights表中(我正在使用Activerecord-Importgem)insights.log ,并且正在创建一个新日志,并且该过程继续进行。

PS:一整天都有大约一百万条记录正在处理并添加到insights表中。

我觉得这不是有效或正确的方法。

我一直在考虑的一个建议是redis在内存中使用和写入日志,每 30 分钟取出所有内容并执行flush.

Rails 6.1.4
Ruby 2.5.8
Redis 4.4

任何建议都非常感谢!

标签: ruby-on-railsloggingactiverecordredisbulkinsert

解决方案


推荐阅读