ruby rails 批量插入数据,bulk_insert-----Gem包使用

Gemfile文件里添加

gem 'bulk_insert' #批量插入

命令行执行安装依赖

bundle install

数据源

["1.180.3.187", 161, 2601]
["1.180.3.178", 161, 2601, 44222, 44333]

批量插入

def test3(param_str)
    log_dir = File.expand_path(File.join(Rails.root.to_s, 'log/nmapresult01_def_v2.log'))
    file = File.open(log_dir)
    file.each_line { |line|
      obj_line = JSON.parse(line)
      if obj_line.count > 0
        puts "obj_line:#{obj_line}"
        # 批量插入
        time = Time.now
        ip = obj_line.first
        obj_line.delete_at(0) #删除数据第一个元素
        Port.bulk_insert(:ip, :port, :created_at, :updated_at) do |ip_port|
          ip_port.set_size = 1000
          obj_line.each do |pt|
            ip_port.add [ip, pt, time, time]
          end
        end
      end
    }
    file.close
    param_str
  end

处理结果

obj_line:["1.180.3.187", 161, 2601]
   (0.2ms)  BEGIN
  SQL (0.5ms)  INSERT  INTO `ports` (`ip`,`port`,`created_at`,`updated_at`) VALUES ('1.180.3.187',161,'2021-07-11 17:43:21','2021-07-11 17:43:21'),('1.180.3.187',2601,'2021-07-11 17:43:21','2021-07-11 17:43:21')
   (13.1ms)  COMMIT
obj_line:["1.180.3.178", 161, 2601, 44222, 44333]
   (0.2ms)  BEGIN
  SQL (0.4ms)  INSERT  INTO `ports` (`ip`,`port`,`created_at`,`updated_at`) VALUES ('1.180.3.178',161,'2021-07-11 17:43:21','2021-07-11 17:43:21'),('1.180.3.178',2601,'2021-07-11 17:43:21','2021-07-11 17:43:21'),('1.180.3.178',44222,'2021-07-11 17:43:21','2021-07-11 17:43:21'),('1.180.3.178',44333,'2021-07-11 17:43:21','2021-07-11 17:43:21')
   (12.5ms)  COMMIT


表结构

class CreatePorts < ActiveRecord::Migration[5.0]
  def change
    create_table :ports do |t|
      t.string :ip
      t.integer :port, default: 0
      t.timestamps
    end
  end
end
CREATE TABLE `ports` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `ip` varchar(255) DEFAULT NULL,
  `port` int(11) DEFAULT '0',
  `created_at` datetime NOT NULL,
  `updated_at` datetime NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

参考示例文章:
https://www.cnblogs.com/lmg-jie/p/9199529.html

文档
https://github.com/jamis/bulk_insert

posted @   HaimaBlog  阅读(223)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示