Я пытаюсь выполнить массовую вставку в MySQL, используя
INSERT INTO TABLE (a, b, c) VALUES (?, ?, ?), (?, ?, ?)
У меня есть общий вход в систему, и я вижу, что это прекрасно работает в большинстве случаев.Однако, когда в таблице есть столбец BLOB, он также не работает.
Я пытаюсь вставить 20 записей.
Без BLOB я вижу все 20 записей в одном и том жезапрос в общем журнале, 20 записей вставлено в тот же запрос.
С BLOB я вижу только 2 записи на запрос в общем журнале, всего 10 запросов.
Это проблема с MySQL, драйвером JDBC, или я что-то упустил.Я бы предпочел использовать BLOB, поскольку у меня есть данные в protobufs.
Вот пример таблицы ...
CREATE TABLE my_table (
id CHAR(36) NOT NULL,
name VARCHAR(256) NOT NULL,
data BLOB NOT NULL,
PRIMARY KEY (id)
);
Затем создайте свои пакетные вставки в коде ...
val ps = conn.prepareStatement(
"INSERT INTO my_table(id, name, data) VALUES (?, ?, ?)")
records.grouped(1000).foreach { group =>
group.foreach { r =>
ps.setString(1, UUID.randomUUID.toString)
ps.setString(2, r.name)
ps.setBlob(3, new MariaDbBlob(r.data))
ps.addBatch()
}
ps.executeBatch()
}
Если вы запустите это и просмотрите общий журнал, вы увидите ...
"2018-10-12T18: 37: 55.714825Z 4 Запрос INSERT INTO my_table (id, name,fqdn, data) VALUES ('b4955537-2450-48c4-9953-e27f3a0fc583', '17 -apply-test ', _binary' 17-apply-test \ 'AAAA (? 2Pending8 ?????, J $ b4955537-2450-48c4-9953-e27f3a0fc583
1: 2: 3: 4: 5: 6: 7: 8Rsystem '), (' 480e470c-6d85-4bbc-b718-21d9e80ac7f7 ', '18 -применить тест), _binary '18-apply-test \ "AAAA (? 2Pending8 ?????, J $ 480e470c-6d85-4bbc-b718-21d9e80ac7f7
1: 2: 3: 4: 5: 6: 7: 8Rsystem ') 2018-10-12T18: 37: 55.715489Z 4 Запрос INSERT INTO my_table (id, name, data) VALUES (' 7571a651-0e0b-4e78-bff0-1394070735ce ', '19 -apply-test', _binary '19-применить-тест \ "AAAA (? 2Pending8 ?????, J $ 7571a651-0e0b-4e78-bff0-1394070735ce
1: 2: 3: 4: 5: 6: 7: 8Rsystem '), ('f77ebe28-73d2-4f6b-8fd5-284f0ec2c3f0', '20 -apply-test ', _binary' 20-apply-test \ "AAAA (? 2Pending8 ?????, J $ f77ebe28-73d2-4f6b-8fd5-284f0ec2c3f0
Как выМожно видеть, что каждый INSERT INTO имеет только 2 записи.
Теперь, если вы удалите поле data
из схемы и вставите и повторно запустите, вы увидите следующий вывод (для10 записей) ...
"2018-10-12T19: 04: 24.406567Z 4 Запрос INSERT INTO my_table (id, name) VALUES ('d323d21e-25ac-40d4-8cff-7ad12f83b8c0', '1-apply-test '), (' f20e37f2-35a4-41e9-8458-de405a44f4d9 ',' 2-apply-test '), (' 498f4e96-4bf1-4d69-a6cb-f0e61575ebb4 ',' 3-apply-test '),('8bf7925d-8f01-494f-8f9f-c5b8c742beae', '4-apply-test'), ('5ea663e7-d9bc-4c9f-a9a2-edbedf3e5415', '5-apply-test'), ('48f535c8-446)4f10-9af9-1562081538e5 ',' 6-apply-test '), (' fbf2661f-3a23-4317-ab1f-96978b39fffe ',' 7-apply-test '), (' 3d781e25-3f30-48fd-b22b-91f0db8ba401 ', '8-apply-test'), ('55ffa950-c941-44dc-a233-ebecfd4413cf', '9-apply-test'), ('6edc6e25-6e70-42b9-8473-6ab68d065d44', '10 -apply-тест ') "
Все 10 записей находятся в одном запросе