S
S
Sergey Doniy2015-03-08 16:12:10
PHP
Sergey Doniy, 2015-03-08 16:12:10

Script optimization with a large number of requests?

Hello. Deployed the project on LAN, the point is. There is a script which executes some sequence of operations - 10000 on one request and brings all 10000 results in a DB.
There are about 100,000 requests. The first 10-20 are executed in time up to 1s, the rest are over, and up to 50 the execution time reaches 5 minutes. Naturally, this is too long.
Please advise if it is possible to speed this up with php. It was originally written in php or can take this part into a separate module in another scripting language, for example, node.js, ruby, python. I am not familiar with c / c ++ at the proper level in order to complete it on time. According to the reaction, it will be faster to execute a sequence of the same type of requests with a different set of incoming data.
Thanks in advance for the tips and I will be doubly grateful if you share your experience in solving such issues and what you used for this.
The backend is implemented in Yii|php, the database is mysql. The index in the table into which the data is added is composite - it consists of 5 fields, and only one, I do not consider id with auto_increment.

Answer the question

In order to leave comments, you need to log in

4 answer(s)
F
FanatPHP, 2015-03-08
@FanatPHP

возможно ли как это ускорить это средствами php.

Нет.
Ускорить можно только средствами головного мозга
Брали скрипт, смотрели, откуда взялось сто тыщ запросов, вешали люлей написавшему, переписывали нормально.

Оптимус Пьян, 2015-03-08
@marrk2

У вас скорее всего не скрипт тормозит а БД когда в ней становится слишком много записей. Сколько записей всего получается? Если база идёт только на вставку а чтения нет, то вставку могут замедлять индексы, т.к. постоянно обновляются. Отключите их, наполните базу, включите.

Алексей Черемисин, 2015-03-08
@leahch

А не пробовали эмулировать работу скрипта на простом sql? Что получается? Ну и без анализа самих запросов, типов данных и структуры таблиц сказать вообще ничего нельзя.
Единственное, что можно порекомендовать- кешируйте данные на чтение. И если при работе тормозит процессор, то попробуйте параллелить задачу, а если тормозят диски - ставьте ssd. Другой путь - не сохранять в базу, а сохранять в память, например в redis, mongo, а уже потом перекидывать готовый результат куда нужно.
И что-то неправильное в консерватории, если индексов на таблицу больше двух, максимум трех... Снесите индексы, проведите массивную вставку, создайте индексы заново. Ну и анализ запросов и explain в помощь.
Что такого можно делать со 100к запросов?!

Александр Кубинцев, 2015-03-08
@akubintsev

Настройте MySQL так, чтобы он своими буферами и кэшем не загребал ОЗУ больше, чем у вас физически есть. Загуглите калькуляторы. Очень похоже, что комп у вас начинает активно свопить.
И действительно, отключите временно индексы в таблицах, в которые идёт запись.

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question