|
|
|
вставить 4500 записей
|
|||
|---|---|---|---|
|
#18+
всем привет предстоит вставить в InnoDB-таблицу 4500 записей из 3-х гигового xml-файла как лучше это сделать? 1. сформировать несколько sql-дампов по 500 записей и затем их импортировать 2. сделать один большой дамп и вставить все разом 3. вставлять в таблицу непосредственно в цикле ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2016, 09:57 |
|
||
|
вставить 4500 записей
|
|||
|---|---|---|---|
|
#18+
Это что ж за записи - чуть не по метру штука? buyboyкак лучше это сделать? LOAD XML LOCAL INFILE Однако с учётом некоторых возможных неблагоприятных эффектов (см. Импорт БД ФИАС в MySQL. Практический опыт. , решение проблемы импорта 16-Гб файла) не исключено, что придётся рубить исходник на куски. Формировать SQL-дампы - не вижу смысла. Или у XML структура не-плоская, и впрямую не импортируется? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2016, 10:04 |
|
||
|
вставить 4500 записей
|
|||
|---|---|---|---|
|
#18+
AkinaЭто что ж за записи - чуть не по метру штука? это база данных книжного магазина AkinaИли у XML структура не-плоская, и впрямую не импортируется? xml-файл - капец какой атасный = атрибутов на узле по 8 штук и дочерних нод штук 20 на 4-5 уровнях вложенности AkinaФормировать SQL-дампы - не вижу смысла почему? они же будут проще, чем рубленый на куски родительский xml ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2016, 10:08 |
|
||
|
вставить 4500 записей
|
|||
|---|---|---|---|
|
#18+
Akina, причем необходимо данные разнести по нескольким таблицам из одного xml-а ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2016, 10:09 |
|
||
|
вставить 4500 записей
|
|||
|---|---|---|---|
|
#18+
buyboy, insert- ом, одним или 4500. 4500 записей -это мало. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2016, 10:21 |
|
||
|
вставить 4500 записей
|
|||
|---|---|---|---|
|
#18+
MasterZivinsert- ом, одним или 4500. не совсем понял... можно вставлять прямо в таблицу в перебирая xml цикле? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2016, 10:25 |
|
||
|
вставить 4500 записей
|
|||
|---|---|---|---|
|
#18+
buyboyxml-файл - капец какой атасный = атрибутов на узле по 8 штук и дочерних нод штук 20 на 4-5 уровнях вложенности buyboyпричем необходимо данные разнести по нескольким таблицам из одного xml-а В таком случае LOAD XML неприменим. И напрямую ни фигашеньки не получится его импортировать, придётся перетряхивать. Если там нет никаких заворотов вроде оцифрованных изображений обложки, и операция одноразовая - я бы предложил некоей (вероятно, самописной) программой пережевать этот XML тупо как текст на несколько CSV - по файлу на таблицу, одновременно добавив при необходимости дополнительные связующие поля. И потом уже загружать данные через LOAD DATA INFILE. Альтернативный вариант - достучаться до этого XML через, скажем, System.XML либо там MSXML2, и перелить его данные в таблицы поштучно. В качестве интерфейса можно использовать, например, MS Access, подключив к нему нужные таблицы через MySQL Connector. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2016, 10:58 |
|
||
|
вставить 4500 записей
|
|||
|---|---|---|---|
|
#18+
Akina...придётся перетряхивать.... так и сделал = написал на php скриптик, который перебрал xml и сфомировал один дамп из 4644 строк потом импортнул его в базу из консоли php-скрипт работал 30 секунд mysql в терминале - 1 секунду первая часть задачи решена p.s. сейчас ради интереса попробую вставлять напрямую в базу - прямо в цикле ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2016, 11:14 |
|
||
|
вставить 4500 записей
|
|||
|---|---|---|---|
|
#18+
buyboyMasterZivinsert- ом, одним или 4500. не совсем понял... можно вставлять прямо в таблицу в перебирая xml цикле?Да как больше нравится. Хотите - по одной строчке вставляйте в цикле обработки входного файла, хотите - в цикле обработки подготовьте запросы на вставку групп записей, а потом по одному запросу на таблицу... Принципиальной разницы нет, лишь бы целостность данных была обеспечена. Возможно, возникнет другая проблема. Возможно, запись из второй таблицы будет ссылаться на id записи в первой таблице. Если эти id заранее неизвестны (отсутствуют в исходном файле), тогда, скорее всего, придётся получать id вновь создаваемых записей первой таблицы для дальнейшего использования. В таком разе проще делать вставку в первую таблицу по одной записи. Во что можно впереться? В ограничение max_allowed_packet - а это обычно довольно большая цифра, порядка сотни мегабайт. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2016, 11:27 |
|
||
|
вставить 4500 записей
|
|||
|---|---|---|---|
|
#18+
Akina, вставил напрямую из цикла за те же 30 секунд... вот только почему-то получилось на одну запись меньше :-( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2016, 11:38 |
|
||
|
вставить 4500 записей
|
|||
|---|---|---|---|
|
#18+
vkleВ ограничение max_allowed_packet - а это обычно довольно большая цифра, порядка сотни мегабайт.По умолчанию всего 1 МБайт до версии 5.6.5 включительно. И 4 Мбайт после. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2016, 11:46 |
|
||
|
вставить 4500 записей
|
|||
|---|---|---|---|
|
#18+
buyboyпочему-то получилось на одну запись меньше Сравнить две версии таблиц и найти пропавшую запись - как бы не проблема, верно? будет попроще понять, почему пропала (или нарисовалась лишняя - тоже бывает, хотя обычно "пропадает" последняя физически запись) запись. Вот только я не очень понимаю - ты произвёл при этом раскладку в несколько таблиц или нет? и если да, то какая таблица "урезана". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2016, 11:49 |
|
||
|
вставить 4500 записей
|
|||
|---|---|---|---|
|
#18+
Akinaты произвёл при этом раскладку в несколько таблиц или нет? пока еще нет - тока обмозговываю... так как во вторую таблицу предстоит вставить 111 тысяч книг = http://www.sql.ru/forum/1206525/vstavit-111-500-zapisey ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2016, 11:52 |
|
||
|
вставить 4500 записей
|
|||
|---|---|---|---|
|
#18+
Да хоть миллион... только следи, чтобы диск не забился. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2016, 11:59 |
|
||
|
вставить 4500 записей
|
|||
|---|---|---|---|
|
#18+
AkinaДа хоть миллион... спасибо, это обнадеживает ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2016, 12:00 |
|
||
|
вставить 4500 записей
|
|||
|---|---|---|---|
|
#18+
Единственный совет - если будешь выполнять загрузку через LOAD DATA|XML, то создавай индексы после загрузки данных. Это как правило получается быстрее, чем загрузка и индексирование одновременно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2016, 12:40 |
|
||
|
вставить 4500 записей
|
|||
|---|---|---|---|
|
#18+
Akinaсоздавай индексы после загрузки данных. Это как правило получается быстрее, чем загрузка и индексирование одновременно. не понял тебя... разве индексы создаются не в момент создания таблицы? или я туплю? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2016, 13:14 |
|
||
|
вставить 4500 записей
|
|||
|---|---|---|---|
|
#18+
ну когда вы добавляете записи в индексированную таблицу, то одновременно со вставкой записи добавляются соответствующая информация в индексные файлы, т.е. возникают дополнительные расходы при вставке. Т.е. вставка в не индексированную таблицу пройдет гораздо быстрее и проще..... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2016, 13:37 |
|
||
|
вставить 4500 записей
|
|||
|---|---|---|---|
|
#18+
Alex_Ustinovвставка в не индексированную таблицу пройдет гораздо быстрее и проще..... ммм... спасибо за разжевывание... на 111 тысячах это, наверняка, будет актуально! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2016, 13:45 |
|
||
|
вставить 4500 записей
|
|||
|---|---|---|---|
|
#18+
buyboyна 111 тысячах это, наверняка, будет актуально! Особенно это актуально при потоковой (LOAD) вставке. Да, триггеры, само собой, тоже быстродействия при вставке не добавляют, посему лучше вставлять заведомо целостные данные, а потом только формировать триггеры. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2016, 13:47 |
|
||
|
вставить 4500 записей
|
|||
|---|---|---|---|
|
#18+
это еще актуальней, если в таблице много индексов и есть форейжны, при этом будут проверяться все констрейнты ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2016, 13:48 |
|
||
|
вставить 4500 записей
|
|||
|---|---|---|---|
|
#18+
Akina, Alex_Ustinov спасибище! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2016, 13:56 |
|
||
|
вставить 4500 записей
|
|||
|---|---|---|---|
|
#18+
на импорте sql-дампа в 35 мегабайт получил Код: sql 1. это видать проблема с max_allowed_packet? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2016, 14:33 |
|
||
|
вставить 4500 записей
|
|||
|---|---|---|---|
|
#18+
сервер лег. смотри логи, может там что то подробнее ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2016, 15:25 |
|
||
|
|

start [/forum/topic.php?fid=47&startmsg=39198528&tid=1832019]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
146ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
| others: | 208ms |
| total: | 449ms |

| 0 / 0 |
