Answer the question
In order to leave comments, you need to log in
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
возможно ли как это ускорить это средствами php.
У вас скорее всего не скрипт тормозит а БД когда в ней становится слишком много записей. Сколько записей всего получается? Если база идёт только на вставку а чтения нет, то вставку могут замедлять индексы, т.к. постоянно обновляются. Отключите их, наполните базу, включите.
А не пробовали эмулировать работу скрипта на простом sql? Что получается? Ну и без анализа самих запросов, типов данных и структуры таблиц сказать вообще ничего нельзя.
Единственное, что можно порекомендовать- кешируйте данные на чтение. И если при работе тормозит процессор, то попробуйте параллелить задачу, а если тормозят диски - ставьте ssd. Другой путь - не сохранять в базу, а сохранять в память, например в redis, mongo, а уже потом перекидывать готовый результат куда нужно.
И что-то неправильное в консерватории, если индексов на таблицу больше двух, максимум трех... Снесите индексы, проведите массивную вставку, создайте индексы заново. Ну и анализ запросов и explain в помощь.
Что такого можно делать со 100к запросов?!
Настройте MySQL так, чтобы он своими буферами и кэшем не загребал ОЗУ больше, чем у вас физически есть. Загуглите калькуляторы. Очень похоже, что комп у вас начинает активно свопить.
И действительно, отключите временно индексы в таблицах, в которые идёт запись.
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question