Ускорить запись в бд.

melo

однажды
Ускорить запись в бд.

Есть несколько csv файлов с ценами и продукцией, которые записываются на сервер. Написал парсер этих файлов и записываю в бд, померял время, самое узкое место получается при вычислениии есть ли такой товар в базе, и последующий его инсерт или апдейт. Вставка 350 видов продукции занимает где-то 21 секунду. Есть ли какой-то способ ускорить?
 

melo

однажды
я там ещё повставлял уникальных полей и INSERT IGNORE INTO, просто не пользовался никогда до этого.
 

Alexandre

PHPПенсионер
сделай процесс вставки асинхронным, те независимым от ВЭБ страницы

на вопрос как - отвечу: через крон и AJAX

запускай зачачу вставки из крона, мониторь файл состояния.. (какой нибудь json или xml файл)
посылай запросы AJAX на файл состояния
а в этот файл паралельно из крона скидывай статус ( % Инсерта)
В итоге пользователь видит прогресс-инсертинг...
Все довольны:
- Пользователь сразу зрит картинку
- WEB Сервер вместо запуска тяжелого скрипта отдает статику
- У самого Сервера освобождается оперативная память для других процессов
- Начальник не имеет гемора от назойливых Пользователей
- Программист тратит премию
 

Adelf

Administrator
Команда форума
непонятно только как с веб-страницы запускать задачу крона :)

Т.е. конечно понятно как, но тогда смысла в кроне - ноль.
 

korchasa

LIMB infected
Автор оригинала: zerkms
INSERT ... ON DUPLICATE KEY UPDATE
+1
Для файлов в несколько метров - за глаза. Если не надо делать операций с другими таблицами, то можно LOAD DATA INFILE.

ЗЫ: На вставку 350 строк, отключение индексов, будет влиять, если у тебя база на калькуляторе крутится или индексов "триста писят мульонов тыщ" и столько же запросов в секунду :)
 

zerkms

TDD infected
Команда форума
korchasa
мне тоже сначала показалось 350 записей. но там 350 видов товаров. о действительном числе записей автор умолчал, посчитав что нам будет более интересное сферическое число.
 
Сверху