INSERT и LOAD DATA в системе, использующей таблицу EAV для динамических атрибутов - PullRequest
0 голосов
/ 29 января 2011

У меня есть устаревшее веб-приложение php, которое выполняет импорт базы данных csv -> в «главную» таблицу, в которой хранятся данные сущностей, и таблицу значений атрибутов сущностей, в которой хранятся динамические данные для каждой сущности.

Процесс импорта представляет собой построчную итерацию через файл csv с INSERT в основную таблицу и несколькими INSERT в таблицу EAV для каждой строки.

Этот процесс SLOOWи то, что мало известно о настройке mysql, говорит мне, что оператор LOAD DATA, как правило, гораздо быстрее, чем серия INSERT;однако из-за процесса EAV итерация все равно должна была бы произойти, хотя и на основе результатов запроса к базе данных, а не файла CSV.

  • Стоит ли вносить изменения?

  • Имеет ли значение, если в каждом файле присутствуют десятки миллионов записей, и, как правило, менее 2/3 полей файла фактически сопоставляются с атрибутами?

1 Ответ

0 голосов
/ 31 января 2011

Звучит как полезная модификация.То, что я хотел бы сделать, это предварительно обработать CSV в два файла - master и eav table.Сложная задача - установить какую-то связь между этими двумя файлами, чтобы вы могли вставить в таблицу eav правильный корректный внешний ключ.

Проблема упрощается, если:

  1. вы можетезаблокируйте любой другой доступ на запись в систему, пока вы выполняете загрузку
  2. первичный ключ главной таблицы представляет собой инкрементное целое число

В этом случае вы можете легко «знать» eavзначение внешнего ключа заблаговременно и установить соответствующим образом перед загрузкой данных для любой таблицы.

Если нет, вам нужно выяснить, как получить значение первичного ключа для записей основной таблицы, опубликовать LOAD DATA и связать с записями eav соответственно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...