Задавайте вопросы, мы ответим
Вы не зашли.
Задавал такой же вопрос на форуме:
http://www.php.ru/forum/viewtopic.php?t=32009
скажите пожалуйста как Вы делали быструю вставку, обновление,
если это касалось 1 000 000 итераций и более
Данные я посылаю через C API c C-кода, т е данные я беру не из базы, а с бинарного файла....
интересует последовательность действий (подготовка запроса, его выполнение)
может быть, что из бинарного файла придется переносить на вставку 100 тысяч записей, цикл однозначно не катит....
если LOAD DATA INFILE , то вначале придется софрмировать txt файл запихнуть в него пачку записей, а потом отдать на вскормку MYSQL, говорят прирост скорости даст в 20 раз....
сама генерация txt файла что то мне не оч нравится...
есть еще вариант вставлять по 1000 записей через строковый буфер
INSERT .... VALUES (..),(...),(...)
придется тоже в цикле, проводить операции конкатенации строки, а потом отсылать ее серверу....
что насчет PREPARE в MySQL? говорят в SQL хорошо подходит для данной ситуации
может у кого то есть опыт в подобных ситуаций, как Вам удавалось:
INSERT,UPDATE 1 млн строк через код языка программирования (С/С++, PHP)
интересует последовательность действий (подготовка запроса, его выполнение)
Неактивен
В своём приложении, делающем примерно то же самое, я в итоге остановился на load data local infile (load data infile, если файл с данными лежит на сервере), получается весьма шустро. А чем Вам не нравится генерация txt-файла для этого?
Можно и через INSERT .... VALUES (..),(...),(...)
Посмотрите вот этот топик.
Что касается последовательности действий:
1. через load data local infile
1) накопить нужное количество данных (ну или копить данные какое-то время), по ходу сбрасывая их в файл.
2) загрузить в БД через load data local infile (лучше в отдельном потоке/процессе, чтобы не блокировать все приложение)
3) стереть файл
2. через длинный insert.
1) выделить большой символьный буфер у себя программе
2) по ходу появления данных писать туда новые values()
3) как количество станет больше, чем, допустим, миллион - выполнить запрос.
Отредактированно deadka (07.05.2011 12:07:52)
Неактивен
" load data local infile (load data infile, если файл с данными лежит на сервере)"
файл с данными лежит не на сервере.
данные с файлов для поиска обрабатываются на отдельных компьютерах клиенскими приложениями.
Т.е приложение должно у себя прочесть файл (бинарный) сделать поиск и отправить результаты удаленно серверу MySQL который стоит на отдельном компьютере.
Неактивен
Бинарный файл... Будь текстовый с разделителями - можно было бы попробовать его сразу в load data local infile, - а так, видимо, надо его прочесть каким-то скриптом/программой, распарсить, и далее уже:
Либо скинуть в текстовый файл с разделителями и через load data local infile отправить в базу.
Либо сформировать длинный запрос - и его в базу. Рекомендовал бы Вам попробовать и так и так - и посмотрить, что быстрее получится .
Неактивен