Общие > Базы данных

Как быстро обновить 1000 записей?

(1/2) > >>

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: В обоих случая для ускорения процесса можно иметь еще одно поле "дата изменения" и включаеть еще и его в условие.

Ваше мнение, уважаеиые специалисты?
--- Конец цитаты ---

Полный идиотизм

Навигация

[0] Главная страница сообщений

[#] Следующая страница

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 
Перейти к полной версии