Общие > Базы данных
Как быстро обновить 1000 записей?
kosm:
Ребят, дайте плиз дельный совет, как на практике решаются такие задачи?
1.Есть простая табличка с полями "наименование" и "наличие", записей порядка 20000.
2.Есть некий файл (CSV), с теми же двумя полями, который пользователь кладет на сервер через форму, записей порядка 1000.
Как можно наиболее оптимально и быстро отметить то, что изменил пользователь в файле, который загрузил на сервер?
Первое что приходт на ум, это построчный UPDATE из файла CSV в цикле. Но это порядка 1000 записей, и даже если на запись по 1сек, что не так, то это уже приличное время, за которое апаа не успевает его выполнить и отваливается по тайм ауту :(
Второй вариант мне когда подсказал уважаемый Alexandr, теоретически выглядит красиво.
Данные из CSV файла загружаются во временную табличку LOAD, а потом UPDATE головной таблици по условию из временной.
Вопрос, делал ли кто уже подобное? На сколько это действительно быстро и реально ли вообще?
PS: В обоих случая для ускорения процесса можно иметь еще одно поле "дата изменения" и включаеть еще и его в условие.
Ваше мнение, уважаеиые специалисты?
Z@:
Для вставки есть такая штука как расширенная вставка(когда в один запрос можно много записейдобавить), может для апдейта тоже есть. Хотя не уверен что это ускорит дело.
kosm:
Z@
Что за расширенная вставка?
Если делать по строчно, то наверно думаю большой выгоды не будет. Тут именно большой прирост в скорости нужен, чтобы укладываться в 30 сек, ну или чуть по-больше, если удасться с хостингом договориться увеличить таймаут.
PS: Дасть ли чего разбиение по транзакциям? Ведь если я явно не указваю START TRANS, то он для каждой опирации делает COMMIT?
kosm:
Поправочка ко второму варианту с временной таблицей.
Сейчас посмотрел спецификацию по команде UPDATE MySQL - похоже что с помощью ее не свести будет две таблицы :( Множественные таблице в этой конструкции стали поддерживаться только с 4-й версии MySQL, у меня же 3.23.41 :(
Может конечно можно как нить извратиться, но пока не знаю как...
Давайте ребят, подключайтесь к обсуждению... Тема ведь наверно довольно злободневная и все борятся за скорость :) И навернякак уже кто-то на чем-то остановился?
PS: Еще вариант, который останется, если ничего не найду, так это запуск скрипта локально по крону... и пущай себе там пыхтит по тихоньку.
Alexandr:
По первому варианту (построчно): не думаю, что будет работать более 1-2 сек. (у меня используется этот вариант для обновления прайсов http://www.autodealer.ru/price/part/ - бегу по каждой строчке, чищу, вставляю), даже дома (на винде) не более 5 сек.
Второй вариант, более реален (конечно если надо вставить 1 в 1), ты его хоть попробуй....
--- Цитировать ---kosm:
PS: В обоих случая для ускорения процесса можно иметь еще одно поле "дата изменения" и включаеть еще и его в условие.
Ваше мнение, уважаеиые специалисты?
--- Конец цитаты ---
Полный идиотизм
Навигация
Перейти к полной версии