С полгода назад оптимизировал операцию импорта в БД большого объема данных. Достаточно было открыть явно транзакцию в начале (и коммитить/откатывать в конце), чтобы уже получить прирост по времени в пару сотен раз.
Что у вас в голове?
- 545890 - это тоже целое число. И чем оно отличается от 250000, или от 280000 - непонятно, так как вы не удосужились сформулировать требования. Вы попросили
- RunSumm - это вы так ranSumm из вашего кода обозвали? Целую минуту думал..
> Мне кажется, что нужно прописать какую-то функцию в третьей строчке?
Третья строчка: ranSumm = getRandomInt(100000, 500000);
getRandomInt возвращает случайное целое число от min до max, ну теперь нужно преобразовать его в другое число? Какое? Каким требованиям должно удовлетворять целое случайное число в диапазоне от 100к до 500к?
Я правильно вообще понимаю систему с основным + дельта-индексом: индексация дельты раз в 5 минут обеспечивает индекс _новыми_ данными, килл-лист обеспечивает непопадание в результаты поиска _удаленных_ данных, а вот что делать с обновившимися записями — вопрос?
Я это видел еще пару лет назад, когда на него даже отзывы были типа «купил такую, заложив 2 квартиры, пришлось стенку разобрать, и батареи демонтировать — от него весь дом отапливался» :)
> Работает только через веб-сервер, а из консоли — отрубается.
отрубается соединение после определенного промежутка времени работы скрипта или не подключается вовсе?
Я не знаю, как так у вас получается
У меня PHP 5.4.6.
Протестил простейший скрипт из одной строчки (которая в ответе, с моим логином-паролем, разумеется) — все работает, потому что порт либо не надо указывать, либо явно указывать 5м параметром. И в консоли, и в вебе работает.
mod_php это или php cli — для соединения значения вроде как не имеет. По крайней мере, в процессе написания и отладки демона этой проблемы у меня вообще не возникало. Возникала другая, посложнее — что коннекшн через какое-то время отрубался, но это другое и данному вопросу не относится.
Эм… я правильно понимаю: последние значения тут понимаются как «последние значения конкретного ключа»? Т.е. последнее значение ключа «c» => 353, «e» => 113 и т.д.? Ключи могут быть любые?
Да и в германе данные передавать тоже не так сложно, правда не понимаю, что имеется ввиду под «сырыми»: если бинарные какие-нибудь — то еще не проверял, а если много ascii (xml, json, etc) — то легко. Биндинг с PHP хорош (правда справочник по функциям не такой добротный как хотелось бы, помогли туториалы, мануалы и то что сам пробовал и гонял у тебя), на сайте еще пишут про c, perl, java, python, ruby, go.
А когда выбирали, Gearman вообще рассматривался? А то я тоже, сначала выбирал между кроликом и форком rescue из мира ruby… А потом на тебе, третья альтернатива вылезла, и в общем-то уже почти прижилась.
Кстати, когда я запустил второй пример из Вашей статьи (раздел Передача данных по частям и дополнительный обмен данными с клиентом) калбэки в клиенте молчали, только серверный скрипт выводил в консоль. Может это связано с версиями gearman'а, хотя я ставил так же, как и в статье.
Да, я видел. Там у вас клиент — демон, пока задача не кончится, он висит. Я же рассматриваю иную модель. Скрипт ставит задачу, и при последующих своих запусках (юзер жмет F5 на странице) проверяет, что с этой задачей6 если еще не поставлена — ставит, если в процессе — пишет ее текущий статус, если выполнена — выдает результаты. Основная проблема — я не нашел способа управлять задачами из клиента из коробки, кроме как ставить их
Кстати, по результатам полудневного копания и тестирования могу сказать, что скрипт-воркер неплохо демонизируется и поддерживается с помощью supervisord. В конфиг-файле указываешь команду (/usr/bin/php /var/www/path/to/file/worker.php), число процессов и прочие настройки, service supervisor start — и нужное число скриптов воркеров ждут заданий)