【问题标题】:Why 'activerecord-import' doesn't perform bulk insert?为什么“activerecord-import”不执行批量插入?
【发布时间】:2019-12-23 03:10:00
【问题描述】:

在测试 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
)

有人知道它为什么会这样工作吗?我在文档中找不到任何内容。

【问题讨论】:

  • 你能显示 insert_values 吗?
  • @demir 我已添加
  • 这样工作吗? Xml.import(cols, insert_values, validate: false)
  • 不,日志显示很多INSERTs

标签: ruby-on-rails activerecord bulkinsert activerecord-import


【解决方案1】:

所以,目前,我找到了一些修改过的第 3 方解决方案 https://gist.github.com/abratashov/155bcd0ea2e02940cc6157e6970e7a2b

它创建批次(默认为 1000 个)并执行一个巨大的BULK INSERT。

Also Rails 6 supports bulk insert

【讨论】:

    猜你喜欢
    • 2017-08-08
    • 2017-01-28
    • 2015-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多