Меня попросили выбрать лучший вариант из трех с точки зрения оптимизации ресурсов.Предположим, у меня есть большой файл Excel с тысячами записей, и мне нужно извлечь эти данные и вставить их в базу данных.3 варианта:
- Загрузка всего в многомерный массив и вставка всего одним сложным запросом;
- Загрузка всего в многомерный массив, затем цикл по каждой строке Excel и выполнениепростой запрос на вставку.
- Внутри цикла прочитайте каждую строку Excel, поместите ее в массив и выполните простой запрос на вставку в БД.
Это длятест на собеседование (я назвал это домашним заданием, не уверен, что это правильно);Некоторое время я размышлял:
- Случай 1 : я мог бы рискнуть ошибкой * out_of_memory * (в зависимости от машины, конечно), но это решение, которое выполняет меньше запросовв базу данных.Два недостатка - огромный объем памяти, выделяемый как для массива, так и для базы данных.Я знаю, что могу превратить Excel в CSV, но это не вариант здесь.Я бы выбрал большой массив и массовую вставку, но боюсь, что для базы данных это будет сложно.
- Случай 2 : я могу рискнуть ошибкой * out_of_memory * при загрузкев массив, но не для второй задачи.Тем не менее выполнение тысяч запросов может привести к снижению производительности базы данных, и этот запрос может стать кандидатом на оптимизацию.
- Случай 3 : все еще есть цикл с тысячами записей (который также занимает много памяти ...), и все еще есть тысячи запросов (которые попадают в базу данных).
Итак, я на самом деле выбрал ответ один, и мне пришлось немного подумать, прежде чем это сделать.
И это было НЕПРАВИЛЬНО.И я на самом деле не знаю, какой из трех был правильным.
Может кто-нибудь помочь мне в этом?Это ответ так плохо?Я думал, что тысячи запросов на вставку будут "плохими", но, похоже, я совершенно не прав ..
EDIT Пояснение: мой вопрос не о том, какая из лучших оптимизаций абсолютно , а о том, какой из трех я представил;так что я не смотрю на другие альтернативы, просто объясню, почему я ошибался и что, аргументировано , лучший ответ вместо этого.