我遇到了一个问题。在我的应用程序中,我为我的模型创建了以下迁移:
create_table(:calculation, primary_key: [:name, :value1]) do |t|
t.string :name
t.bigint :value1
t.decimal :value2
t.decimal :value3
t.decimal :value4
t.timestamps
end
从我连接到的API中,我得到了如下所示的响应:
[
[
44812342, // value1
"723.21000000", // value2
"723.21000000", // value3
"0", // UNNESSECARY VALUE (SKIP THIS ONE)
"723.21000000", // value4
],
[
44812342, // value1
"723.21000000", // value2
"723.21000000", // value3
"0", // UNNESSECARY VALUE (SKIP THIS ONE)
"723.21000000", // value4
]
]
现在我想写一个作业,在最后使用批量插入将所有接收到的计算写入我的postgres DB。性能真的很重要,所以我想我应该首先将其Map到rails模型,然后调用insert_all
并传递包含所有模型的数组。我遇到的问题是结果不包含任何散列。我想到使用这样的东西:
name = 'MyName'
calculationModels = calculationArrays.map do |calculation|
Calculation.new(
name: name,
value1: calculation[0],
value2: calculation[1],
value3: calculation[2],
value4: calculation[4]
)
end
Calculation.insert_all(calculationModels)
但我不确定这是否能快速使用,因为在生产环境中,它会执行超过一百万次的计算,所以我的问题是:将这些数组放入数据库的最快方法是什么?
1条答案
按热度按时间5w9g7ksd1#
当您从API响应时,如下所示:
然后你可以像这样把记录输入到你的数据库中
也可以像这样使用
insert_all
:注意,在这两种情况下都需要设置
name
,因为您将该列定义为主键的一部分。