T1grOK
16.07.2014 - 17:39
Есть парсер, предположительно должен быть многопользовательским. Он выполняет довольно много манипуляций (в памяти).
Дело в том, что другой пользователь не может войти, он ожидает как понимаю пока Mysql разгрузится.
Есть следующие данные(при запущенном одном парсере):
1) ОЗУ предостаточно. 0,5 ГБ стабильно свободно.
2) Процессор загружен не более, чем на 20%(интересно на VPS показывает относительно моих ресурсов?!).
3) Операции вставки производятся, через INSERT IGNORE INTO, с интервалом 0,4-0,5 секунды(1 вставка - группа записей(25шт)).
4) Соединение держится 3 часа.
5) Всего в базу поступает 6-7к запросов на вставку.
Какие есть предположения, мысли, советы? Может как то сконфигурировать Mysql нужно?
Или виноват кто то другой?
_____________
Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
sergeiss
16.07.2014 - 18:25
T1grOK, я вот не совсем понял. То есть, у тебя есть парсер, который "барабанит" 3 часа, блокируя на это время Мускуль для других юзеров? Если это так, то почему бы просто не писать данные куда-нибудь в текстовый файл, а потом, по окончании процесса парсенья, залить это всё в БД?
_____________
*
Хэлп по PHP*
Описалово по JavaScript *
Хэлп и СУБД для PostgreSQL*
Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги. *
"накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)
inpost
16.07.2014 - 18:41
T1grOKВарианты:
1) Используй innodb движок. Блокируется не таблица, а только строка.
2) Снизить нагрузку на одну таблицу через временную таблицу или файл. Копируй результаты парсера туда, в конце всё объединишь.
3) Между запросами ставь sleep, то есть на 1-2 секунды таблица будет освобождаться от работы с парсером и будет доступна другим запросам пользователей. Единственная проблема, что запросы будут медленнее в момент выполнения парсера.
_____________
Обучаю веб-программированию качественно и не дорого:
http://school-php.comФрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
T1grOK
17.07.2014 - 09:48
Да, спасибо. Сделал так, подключаюсь к базе, делаю основные манипуляции, закрываю соединение, получаю и обрабатываю данные, делаю новое подключение, и забрасываю все данные в БД.
Всем спасибо.
Сильно не бейте, спрошу в этой же теме. Можно ли распараллелить запросы http сервера. То есть, сейчас открыв 2 вкладки в браузере, они обрабатываются последовательно, а нужно параллельно. То есть, http сервер (процесс) привязывается к сессии(или любому другому идентификатору).
Как то можно настроить, чтоб каждый запрос обрабатывал, отдельный процесс что ли...
_____________
Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
sergeiss
17.07.2014 - 10:34
Цитата (T1grOK @ 17.07.2014 - 09:48) |
Сильно не бейте, спрошу в этой же теме. Можно ли распараллелить запросы http сервера. То есть, сейчас открыв 2 вкладки в браузере, они обрабатываются последовательно, а нужно параллельно. То есть, http сервер (процесс) привязывается к сессии(или любому другому идентификатору). Как то можно настроить, чтоб каждый запрос обрабатывал, отдельный процесс что ли... |
За что тебя бить-то? Скажи за что - побъём
Если я правильно понял суть проблемы, то она хорошо известна. Пока сессия открыта одним процессом, другой стоит в очереди и ждет освобождения сессионного файла. Решается это так, что надо освобождать сессионный файл как можно быстрее, чтобы к нему мог получить доступ другой процесс.
Как вариант - хранить сессионные данные в БД в отдельной таблице, а собственно сессию использовать только для получения идентификатора, по которому потом искать данные в БД.
_____________
*
Хэлп по PHP*
Описалово по JavaScript *
Хэлп и СУБД для PostgreSQL*
Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги. *
"накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)