Меня попросили выбрать лучший вариант из трех с точки зрения оптимизации ресурсов.
Предположим, у меня есть большой файл Excel с тысячами записей, и мне нужно извлечь эти данные и вставить их в базу данных. . 3 варианта:
- Загружать все в многомерный массив и вставлять все одним сложным запросом;
- Загрузите все в многомерный массив, затем переберите каждую строку Excel и выполните простой запрос на вставку.
- Внутри цикла прочитайте каждую строку Excel, поместите ее в массив, а затем выполните простой запрос на вставку в БД.
Это для теста на собеседовании (я назвал это домашним заданием, не уверен, что это правильно); Я ненадолго задумался:
- Случай 1: я могу рискнуть ошибкой *out_of_memory* (конечно, в зависимости от машины), но это решение выполняет меньше запросов к базе данных. Два недостатка — огромный объем памяти, который нужно выделить как для массива, так и для базы данных. Я знаю, что могу преобразовать Excel в CSV, но здесь это не вариант. Я бы выбрал большой массив и массовую вставку, но боюсь, что это будет сложно для базы данных.
- Случай 2: я могу рискнуть ошибкой *out_of_memory* при загрузке в массив, но не для второй задачи. Тем не менее, выполнение тысяч запросов может сказаться на производительности базы данных, и этот запрос, скорее всего, будет кандидатом на оптимизацию.
- Вариант 3. По-прежнему существует цикл с тысячами записей (что также занимает много памяти...) и по-прежнему выполняются тысячи запросов (которые поражают базу данных).
Итак, я на самом деле выбрал первый ответ, и мне пришлось немного подумать, прежде чем сделать это.
И это было НЕПРАВИЛЬНО. И я на самом деле не знаю, какой из трех был правильным.
Может ли кто-нибудь помочь мне в этом? Так ли плох этот ответ? Я думал, что тысячи запросов на вставку будут «плохими», но, похоже, я совершенно не прав.
РЕДАКТИРОВАТЬ
Уточнение: мой вопрос не о том, какая оптимизация является лучшей абсолютно, а о том, какая из трех, которые я представил; поэтому я не рассматриваю другие альтернативы, а просто объясняю, почему я был неправ и какой ответ аргументированно является лучшим.
LOAD DATA LOCAL INFILE
для ее импорта? Зачем использовать PHP? - person Michael Berkowski   schedule 12.07.2011