为什么 'activerecord-import' 不执行批量插入?
Why 'activerecord-import' doesn't perform bulk insert?
在测试了 activerecord-import 用于批量插入的库后,我发现它不会执行一个巨大的 INSERT
,而是执行很多小的 INSERTs
Xml.import(
insert_values,
ignore: true,
validate: false,
batch_size: 1000
)
# =>
INSERT INTO `xmls` (`path`,`import_id`,`status`,`last_modified`,`created_at`,`updated_at`) VALUES ('test-folder/0_0.xml',114,10,'2019-08-16 20:02:20','2019-08-16 20:02:20','2019-08-16 20:02:20')
INSERT INTO `xmls` (`path`,`import_id`,`status`,`last_modified`,`created_at`,`updated_at`) VALUES ('test-folder/0_1.xml',114,10,'2019-08-16 20:02:20','2019-08-16 20:02:20','2019-08-16 20:02:20')
#...
INSERT INTO `xmls` (`path`,`import_id`,`status`,`last_modified`,`created_at`,`updated_at`) VALUES ('test-folder/0_2.xml',114,10,'2019-08-16 20:02:20','2019-08-16 20:02:20','2019-08-16 20:02:20')
我试过将 insert_values
设置为 XML.new
的数组,也尝试将其设置为纯数组:
cols = [:path, :import_id, :status, :last_modified]
insert_values = [
[ 0] [
[0] "test-folder/0_0.xml",
[1] 115,
[2] 10,
[3] Sat, 17 Aug 2019 05:37:02 EDT -04:00
],
[ 1] [
[0] "test-folder/0_1.xml",
[1] 115,
[2] 10,
[3] Sat, 17 Aug 2019 05:37:02 EDT -04:00
],
#...
]
Xml.import(
cols,
insert_values,
ignore: true,
validate: false,
batch_size: 1000
)
有人知道为什么会这样吗?我在文档中找不到任何内容。
所以,目前,我找到了稍微修改过的第 3 方解决方案 https://gist.github.com/abratashov/155bcd0ea2e02940cc6157e6970e7a2b
它创建批次(默认为 1000)并执行巨大的 BULK INSERT
。
在测试了 activerecord-import 用于批量插入的库后,我发现它不会执行一个巨大的 INSERT
,而是执行很多小的 INSERTs
Xml.import(
insert_values,
ignore: true,
validate: false,
batch_size: 1000
)
# =>
INSERT INTO `xmls` (`path`,`import_id`,`status`,`last_modified`,`created_at`,`updated_at`) VALUES ('test-folder/0_0.xml',114,10,'2019-08-16 20:02:20','2019-08-16 20:02:20','2019-08-16 20:02:20')
INSERT INTO `xmls` (`path`,`import_id`,`status`,`last_modified`,`created_at`,`updated_at`) VALUES ('test-folder/0_1.xml',114,10,'2019-08-16 20:02:20','2019-08-16 20:02:20','2019-08-16 20:02:20')
#...
INSERT INTO `xmls` (`path`,`import_id`,`status`,`last_modified`,`created_at`,`updated_at`) VALUES ('test-folder/0_2.xml',114,10,'2019-08-16 20:02:20','2019-08-16 20:02:20','2019-08-16 20:02:20')
我试过将 insert_values
设置为 XML.new
的数组,也尝试将其设置为纯数组:
cols = [:path, :import_id, :status, :last_modified]
insert_values = [
[ 0] [
[0] "test-folder/0_0.xml",
[1] 115,
[2] 10,
[3] Sat, 17 Aug 2019 05:37:02 EDT -04:00
],
[ 1] [
[0] "test-folder/0_1.xml",
[1] 115,
[2] 10,
[3] Sat, 17 Aug 2019 05:37:02 EDT -04:00
],
#...
]
Xml.import(
cols,
insert_values,
ignore: true,
validate: false,
batch_size: 1000
)
有人知道为什么会这样吗?我在文档中找不到任何内容。
所以,目前,我找到了稍微修改过的第 3 方解决方案 https://gist.github.com/abratashov/155bcd0ea2e02940cc6157e6970e7a2b
它创建批次(默认为 1000)并执行巨大的 BULK INSERT
。