PHP большой тормоз?

Статус
В этой теме нельзя размещать новые ответы.

webikdddorf

Новичок
PHP большой тормоз?

Давно работаю с PHP. Писал и большие скрипты и маленькие, но сортировкой массивов еще мало работал, такое редко где нужно. Так вот вчера решил я перевести часть mysql запросов на выборку из массива, зачемя, подумал я, делать 2000 запросов к базе, когда можно сделать 10 и потом взять данные из массива PHP. Но не тут то было!!!

Имеем массив в 1000 записей. Записи вида:
1=>2
4=>2
6=>1
3=>9 и т.д. (Кароче Id категории и её parent.)

Вот результаты на мощном боевом сервере(ПО сервера настраивали под заказ, все скрипты там летают, так что сервер ok):

PHP:
$result  = array_keys ($massiv, $parent);
- 0.9 сек.

Слегка доработал
PHP:
$result  = array_keys ($massiv, (int)$parent);
- 0.6 сек.

Я разочарован. Неужели PHP такой тормоз???? Чтобы выбрать ключи из массива с какой-то 1000 записей нужна целая секунда, 0.6???? Пипец. Может я чего-то не догоняю?

Всегда писал скрипты с расчетом на то, что если время генерации более 0.1 секунды это не скрипт, а дерьмо, и всегда выходил из ситуации. Но тут....
 

Nicholas

Новичок
делать 2000 запросов к базе
Бугага.
Ну вы даете батенька =)

PHP:
$arr = array();

for ($i = 0; $i < 1000000; $i++)
{
  $arr[$i] = mt_rand(0, 10);
}

$_t = microtime(true);
$res = array_keys($arr, 7);

echo round(microtime(true) - $_t, 5);
У меня выполняется 0.07 секунд.
Заметьте, у исходного массива, миллион индексов.
Видимо тормоз здесь все-таки не ПХП =)
 

webikdddorf

Новичок
Да, я немного недосказал, только что заметил что не написал. Эта штука выполняется 3000 раз. (только не надо мне писать типо я сума сошел, я не виноват что у клиента 1.5 тыс. категорий и 300 тыс товаров.)

PHP:
$result  = array_keys ($massiv, (int)$parent);
x 3000 раз

-~{}~ 29.11.08 22:38:

Автор оригинала: Nicholas
У меня выполняется 0.07 секунд.
Заметьте, у исходного массива, миллион индексов.
Видимо тормоз здесь все-таки не ПХП =)
Если ваш результат увеличить на 3000 раз, то будет 210 секунд. Нда, у меня за 0.6 у вас 210 секунд. Видно сервер у вас совсем слабый. Но дело не в этом. Получается что если прокинуть 1000 выборок из 1000 значений, php дохнет и выполняется мучительно долго? Это же пипец. Может кто нибудь подскажет, в С++ такого нет? Хорошо что гугл не сортирует свои базы через php, а то бы они годами это делали. В общем разочарован в PHP. 20 просмотров и один ответ здесь тому подтверждение, видимо с этим ничего не поделать.
 

.des.

Поставил пиво кому надо ;-)
Тормоз здесь не php.
3000 раз в цикле это не серьезно. Нужно не меньше 100000.
 

webikdddorf

Новичок
О да, вы дали луший ответ за все время пребывания на форуме. Это уже не удивительно.

Здесь есть вменяемые Гуру? Замеры точные, 3000 раз 0.6 секунды. Чистый PHP.
Количество товаров и категорйи писал выше, сменить движок магазина тоже заказчик не дает. Кто нить может что-то подсказать или ничего не сделать с этим?
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
Данные из БД нужно извлекать сортировать средствами БД.
Точка.
Если для этого нужно 100500 запросов - значит система/скрипт/магазин спроектированы не правильно.
Если заказчик чего-то не дает - то твоя задача объяснить ему в чем затыки.
 

Wicked

Новичок
webikdddorf
а чего Вы хотели от алгоритма со сложностью O(n*m) с такими n и m? :) А ведь можно уложиться в O(n), используя сильные стороны хэш-таблиц.

ПС: Хотели гуру - получите.
 

Angerslave

Новичок
Да уж, 3000 раз пробежаться по массиву с 1000 элементов...
А зачем это всё нужно-то? Чтобы прям всё дерево категорий построить?
Так тут не мудрено, если такую схему юзать, то делать при каждом запросе страницы столько запросов, не только PHP залагает.
 

Andre

Новичок
webikdddorf
А чего делать то надо вообще? Вот у нас около 1000 категорий и 400 тысяч товаров и что-то я не замечал надобности для таких сортировок...
 

Alexandre

PHPПенсионер
Вот у нас около 1000 категорий и 400 тысяч товаров и что-то я не замечал надобности для таких сортировок...
у меня 2,5 тыс категорий и 1,7 млн товаров и я тоже не замечал в подобной надобности :)
 

SiMM

Новичок
Чтобы выбрать ключи из массива с какой-то 1000 записей нужна целая секунда
А зачем PHP'шному скрипту целая тысяча записей? Вы что, клиенту всю эту 1000 выводите?
 

HraKK

Мудак
Команда форума
Ребят завязывайте стебатся вы что не видите что с Гуру разговариваете?
 

kvf77

Red Devil
Если мы стебемся над темой, не значит что надо её прикрывать. Если уж так не в терпеж - выкинь флуд с темы.
HraKK.
 

webikdddorf

Новичок
Спасибо всем, сократил запросы до 1500х1500 С помощью (int) добился сокращения времени обработки. Тема закрыта.
 

HraKK

Мудак
Команда форума
клиника. Вот так и рождаються настоящие хайлоадеры пишущие большие скрипты.
 

Breeze

goshogun
Команда форума
Партнер клуба
угу. сократил костыли с подмышек до локтей.

-~{}~ 01.12.08 18:16:

а потом заказчик: "на php делать? не-ет, мне сказали, что он медленный и для больших проектов не годится"
 

Angerslave

Новичок
webikdddorf
Всё-таки ответь, зачем тебе это надо-то?

-~{}~ 01.12.08 21:25:

Кстати, по поводу этой "оптимизации": сокращать количество IO операций это, конечно, хорошо, но закон "не делай средствами PHP то, что можно сделать средствами базы данных" ещё никто не отменял.
 

Wicked

Новичок
но закон "не делай средствами PHP то, что можно сделать средствами базы данных" ещё никто не отменял.
ну уж прям уж закон...
а я вот не согласен.
если бы база масштабировалась так же легко, как бэкенды, то может быть... А иначе я склонен думать, что пхп все-таки должен защищать базу от нагрузки.

-~{}~ 01.12.08 21:33:

это безотносительно этого топика
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху