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;
[Haima的博客]
http://www.cnblogs.com/haima/
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 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语句:使用策略模式优化代码结构