Почему «activerecord-import» не выполняет массовую вставку?

После тестирования библиотеки 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
)

Кто-нибудь знает, почему это работает таким образом? В документации ничего не нашел.


person Sasha B.    schedule 16.08.2019    source источник
comment
Можете ли вы показать вставки_значения?   -  person demir    schedule 17.08.2019
comment
@demir я добавил   -  person Sasha B.    schedule 17.08.2019
comment
Это так работает? Xml.import(cols, insert_values, validate: false)   -  person demir    schedule 18.08.2019
comment
Нет, журнал показывает много INSERTs   -  person Sasha B.    schedule 19.08.2019


Ответы (1)


Итак, в настоящее время я нашел немного модифицированное стороннее решение https://gist.github.com/abratashov/155bcd0ea2e02940cc6157e6970e7a2b

Он создает пакеты (по умолчанию 1000) и выполняет огромное количество операций BULK INSERT.

Также Rails 6 поддерживает массовую вставку

person Community    schedule 19.08.2019