powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / вставить 4500 записей
25 сообщений из 27, страница 1 из 2
вставить 4500 записей
    #39198528
buyboy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
всем привет
предстоит вставить в InnoDB-таблицу 4500 записей из 3-х гигового xml-файла
как лучше это сделать?
1. сформировать несколько sql-дампов по 500 записей и затем их импортировать
2. сделать один большой дамп и вставить все разом
3. вставлять в таблицу непосредственно в цикле
...
Рейтинг: 0 / 0
вставить 4500 записей
    #39198535
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это что ж за записи - чуть не по метру штука?

buyboyкак лучше это сделать?
LOAD XML LOCAL INFILE

Однако с учётом некоторых возможных неблагоприятных эффектов (см. Импорт БД ФИАС в MySQL. Практический опыт. , решение проблемы импорта 16-Гб файла) не исключено, что придётся рубить исходник на куски.

Формировать SQL-дампы - не вижу смысла. Или у XML структура не-плоская, и впрямую не импортируется?
...
Рейтинг: 0 / 0
вставить 4500 записей
    #39198543
buyboy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkinaЭто что ж за записи - чуть не по метру штука?
это база данных книжного магазина

AkinaИли у XML структура не-плоская, и впрямую не импортируется?
xml-файл - капец какой атасный = атрибутов на узле по 8 штук и дочерних нод штук 20 на 4-5 уровнях вложенности

AkinaФормировать SQL-дампы - не вижу смысла
почему? они же будут проще, чем рубленый на куски родительский xml
...
Рейтинг: 0 / 0
вставить 4500 записей
    #39198544
buyboy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina,
причем необходимо данные разнести по нескольким таблицам из одного xml-а
...
Рейтинг: 0 / 0
вставить 4500 записей
    #39198554
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buyboy,
insert- ом, одним или 4500.

4500 записей -это мало.
...
Рейтинг: 0 / 0
вставить 4500 записей
    #39198556
buyboy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivinsert- ом, одним или 4500.
не совсем понял...
можно вставлять прямо в таблицу в перебирая xml цикле?
...
Рейтинг: 0 / 0
вставить 4500 записей
    #39198581
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buyboyxml-файл - капец какой атасный = атрибутов на узле по 8 штук и дочерних нод штук 20 на 4-5 уровнях вложенности
buyboyпричем необходимо данные разнести по нескольким таблицам из одного xml-а
В таком случае LOAD XML неприменим. И напрямую ни фигашеньки не получится его импортировать, придётся перетряхивать.

Если там нет никаких заворотов вроде оцифрованных изображений обложки, и операция одноразовая - я бы предложил некоей (вероятно, самописной) программой пережевать этот XML тупо как текст на несколько CSV - по файлу на таблицу, одновременно добавив при необходимости дополнительные связующие поля. И потом уже загружать данные через LOAD DATA INFILE.

Альтернативный вариант - достучаться до этого XML через, скажем, System.XML либо там MSXML2, и перелить его данные в таблицы поштучно. В качестве интерфейса можно использовать, например, MS Access, подключив к нему нужные таблицы через MySQL Connector.
...
Рейтинг: 0 / 0
вставить 4500 записей
    #39198611
buyboy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina...придётся перетряхивать....
так и сделал = написал на php скриптик, который перебрал xml и сфомировал один дамп из 4644 строк
потом импортнул его в базу из консоли
php-скрипт работал 30 секунд
mysql в терминале - 1 секунду
первая часть задачи решена
p.s. сейчас ради интереса попробую вставлять напрямую в базу - прямо в цикле
...
Рейтинг: 0 / 0
вставить 4500 записей
    #39198622
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buyboyMasterZivinsert- ом, одним или 4500.
не совсем понял...
можно вставлять прямо в таблицу в перебирая xml цикле?Да как больше нравится. Хотите - по одной строчке вставляйте в цикле обработки входного файла, хотите - в цикле обработки подготовьте запросы на вставку групп записей, а потом по одному запросу на таблицу... Принципиальной разницы нет, лишь бы целостность данных была обеспечена.

Возможно, возникнет другая проблема. Возможно, запись из второй таблицы будет ссылаться на id записи в первой таблице. Если эти id заранее неизвестны (отсутствуют в исходном файле), тогда, скорее всего, придётся получать id вновь создаваемых записей первой таблицы для дальнейшего использования. В таком разе проще делать вставку в первую таблицу по одной записи.

Во что можно впереться? В ограничение max_allowed_packet - а это обычно довольно большая цифра, порядка сотни мегабайт.
...
Рейтинг: 0 / 0
вставить 4500 записей
    #39198641
buyboy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina, вставил напрямую из цикла за те же 30 секунд...
вот только почему-то получилось на одну запись меньше :-(
...
Рейтинг: 0 / 0
вставить 4500 записей
    #39198645
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vkleВ ограничение max_allowed_packet - а это обычно довольно большая цифра, порядка сотни мегабайт.По умолчанию всего 1 МБайт до версии 5.6.5 включительно. И 4 Мбайт после.
...
Рейтинг: 0 / 0
вставить 4500 записей
    #39198649
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buyboyпочему-то получилось на одну запись меньше
Сравнить две версии таблиц и найти пропавшую запись - как бы не проблема, верно? будет попроще понять, почему пропала (или нарисовалась лишняя - тоже бывает, хотя обычно "пропадает" последняя физически запись) запись.
Вот только я не очень понимаю - ты произвёл при этом раскладку в несколько таблиц или нет? и если да, то какая таблица "урезана".
...
Рейтинг: 0 / 0
вставить 4500 записей
    #39198653
buyboy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akinaты произвёл при этом раскладку в несколько таблиц или нет?
пока еще нет - тока обмозговываю...
так как во вторую таблицу предстоит вставить 111 тысяч книг = http://www.sql.ru/forum/1206525/vstavit-111-500-zapisey
...
Рейтинг: 0 / 0
вставить 4500 записей
    #39198665
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да хоть миллион... только следи, чтобы диск не забился.
...
Рейтинг: 0 / 0
вставить 4500 записей
    #39198667
buyboy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkinaДа хоть миллион...
спасибо, это обнадеживает
...
Рейтинг: 0 / 0
вставить 4500 записей
    #39198710
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Единственный совет - если будешь выполнять загрузку через LOAD DATA|XML, то создавай индексы после загрузки данных. Это как правило получается быстрее, чем загрузка и индексирование одновременно.
...
Рейтинг: 0 / 0
вставить 4500 записей
    #39198746
buyboy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akinaсоздавай индексы после загрузки данных. Это как правило получается быстрее, чем загрузка и индексирование одновременно.
не понял тебя...
разве индексы создаются не в момент создания таблицы?
или я туплю?
...
Рейтинг: 0 / 0
вставить 4500 записей
    #39198764
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну когда вы добавляете записи в индексированную таблицу, то одновременно со вставкой записи добавляются соответствующая информация в индексные файлы, т.е. возникают дополнительные расходы при вставке.
Т.е. вставка в не индексированную таблицу пройдет гораздо быстрее и проще.....
...
Рейтинг: 0 / 0
вставить 4500 записей
    #39198773
buyboy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex_Ustinovвставка в не индексированную таблицу пройдет гораздо быстрее и проще.....
ммм... спасибо за разжевывание...
на 111 тысячах это, наверняка, будет актуально!
...
Рейтинг: 0 / 0
вставить 4500 записей
    #39198777
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buyboyна 111 тысячах это, наверняка, будет актуально!
Особенно это актуально при потоковой (LOAD) вставке.
Да, триггеры, само собой, тоже быстродействия при вставке не добавляют, посему лучше вставлять заведомо целостные данные, а потом только формировать триггеры.
...
Рейтинг: 0 / 0
вставить 4500 записей
    #39198778
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
это еще актуальней, если в таблице много индексов и есть форейжны, при этом будут проверяться все констрейнты
...
Рейтинг: 0 / 0
вставить 4500 записей
    #39198790
buyboy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina, Alex_Ustinov
спасибище!
...
Рейтинг: 0 / 0
вставить 4500 записей
    #39198815
buyboy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
на импорте sql-дампа в 35 мегабайт получил
Код: sql
1.
ERROR 2006 (HY000) at line 1: MySQL server has gone away


это видать проблема с max_allowed_packet?
...
Рейтинг: 0 / 0
вставить 4500 записей
    #39198851
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сервер лег. смотри логи, может там что то подробнее
...
Рейтинг: 0 / 0
вставить 4500 записей
    #39198873
buyboy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex_Ustinovсервер лег. смотри логи, может там что то подробнее
у меня max_allowed_packet = 1М... :-))
выставил в max_allowed_packet = 64М и рестартанул mysqld
...
Рейтинг: 0 / 0
25 сообщений из 27, страница 1 из 2
Форумы / MySQL [игнор отключен] [закрыт для гостей] / вставить 4500 записей
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]