За последние 24 часа нас посетили 62182 программиста и 1796 роботов. Сейчас ищут 835 программистов ...

Вопрос оптимизации

Тема в разделе "PHP для новичков", создана пользователем ShamahN, 18 май 2008.

  1. ShamahN

    ShamahN Активный пользователь

    С нами с:
    10 апр 2007
    Сообщения:
    1.449
    Симпатии:
    0
    Адрес:
    г.Волгодонск Роствской обл.
    Вот занялся оптимизацией своего движка (УХ как громко) :)
    Почти переписал на XML (не знаю стало ли оптимальнее, но удобнее немного точно)
    Теперь дошло дело до оптимизации запросов.
    Опишу таблицу с основными элементами.

    Поле id(как обычно) и поле idMaster ...
    Остальные поля как бы не важны.
    Описание: Данная таблица как бы реализует древовидную структуру (не знаю как оно делается прогрессивно, это я придумал сам и замечательно работает, плохо конечно что элемент напрямую не знает о своих потомках, но это при необходимости можно дописать.. не суть). Id - Идентификатор элемента, idMaster - Идентификатор родителя. Думаю не стоит объяснять, что таким образом можно организовать достаточно функциональную структурку.
    Теперь. У меня есть объект который занимается разбором данного дерева (уже выкладывал тут на форуме http://php.ru/forum/viewtopic.php?t=12209). Можно заметить, что там, рекурсивно для каждого элемента выбираются его потомки, с каждым из которых потом производится то же самое.
    Вопрос: Может быть, будет оптимальнее выбрать сразу все записи этой таблицы, а потом в цикле пробегать по всем записям выборки и отбирать необходимые? Или (думаю) будет напрямую зависеть от размера таблицы.
    В общем, если у кого есть чем поделиться - пожалуйста, не стесняйтесь. Буду премного благодарен!!!
     
  2. ShamahN

    ShamahN Активный пользователь

    С нами с:
    10 апр 2007
    Сообщения:
    1.449
    Симпатии:
    0
    Адрес:
    г.Волгодонск Роствской обл.
    В общем не наш конек - оптимизация :)
    Ладно, реализую вторым способом, замерю результаты, но думаю что все прекрасно понимают что они будут напрямую зависеть от настроения моей винды во время замера :)
    (по прежнему жду и надеюсь что кто-нить что-нить расскажет)
     
  3. topas

    topas Активный пользователь

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
    Довольно дешевый и качественный способ оптимизации SQL-запросов это индексы.
    Правильно выбрать индекс поможет:
    [sql]
    EXPLAIN
    [/sql]

    Извините, если неправильно понял вопрос
     
  4. ShamahN

    ShamahN Активный пользователь

    С нами с:
    10 апр 2007
    Сообщения:
    1.449
    Симпатии:
    0
    Адрес:
    г.Волгодонск Роствской обл.
    topas
    у меня у хостера ограничение не только по времени выполнения скрипта :) есть так же лимит на количество запросов в час :) так что... надо все хорошенько взвесить, но добавить второй индекс конечно идея :)
     
  5. topas

    topas Активный пользователь

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
    ShamahN
    Чтобы уменьшить количество запросов необходимо и достаточно кэшировать результаты SQL-запросов и складывать их в файлы или БД :). В большинстве средних систем так и сделано
     
  6. ShamahN

    ShamahN Активный пользователь

    С нами с:
    10 апр 2007
    Сообщения:
    1.449
    Симпатии:
    0
    Адрес:
    г.Волгодонск Роствской обл.
    topas
    не понятно. Положить результат запроса в бд чтобы его потом опять от туда доставать? смутно себе представляю..
    А нет живых примеров? где можно почитать? :)
     
  7. topas

    topas Активный пользователь

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
    нет, примеров нет, но думаю google ответит по запросу 'Кэшировать запросы'
     
  8. topas

    topas Активный пользователь

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
    Для начала думаю подойдет небольшая статья:
    Простое кэширование SQL запросов

    Ну а дальше - гуглить :)

    UPD> задача тривиальная, так что на помощь в этом вопросе даже не надейтесь :)
     
  9. ShamahN

    ShamahN Активный пользователь

    С нами с:
    10 апр 2007
    Сообщения:
    1.449
    Симпатии:
    0
    Адрес:
    г.Волгодонск Роствской обл.
    спасибо :)
     
  10. topas

    topas Активный пользователь

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
    PHP:
    1. <?php
    2. $hands = Humag::getHands();
    3. while(true){
    4.     $hands->press('CTRL+C');
    5.     $hands->press('ALT+TAB');
    6.     $hands->press('CTRL+V');
    7. }
    8. ?>
     
  11. ShamahN

    ShamahN Активный пользователь

    С нами с:
    10 апр 2007
    Сообщения:
    1.449
    Симпатии:
    0
    Адрес:
    г.Волгодонск Роствской обл.
    $hands->press('ALT+TAB'); забыл :)
     
  12. topas

    topas Активный пользователь

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
    разве? ;)

    Если идти дальше, то поставил бы $hands->doAction->changeDocument();
     
  13. ShamahN

    ShamahN Активный пользователь

    С нами с:
    10 апр 2007
    Сообщения:
    1.449
    Симпатии:
    0
    Адрес:
    г.Волгодонск Роствской обл.
    Думаю, changeSource() сработало бы правильнее... Хотя и документ тож вполне работоспособно ;) :)
    ...
    Хотя нет.. Источник один и тот же :)
    А о чем это мы? оптимизация вроде... :) Это был оффтоп :)
     
  14. topas

    topas Активный пользователь

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
    Ну что поделаешь, если оффтоп выглядит для меня интереснее чем сама тема?
    Полностью согласен на changeSource() :)
     
  15. ShamahN

    ShamahN Активный пользователь

    С нами с:
    10 апр 2007
    Сообщения:
    1.449
    Симпатии:
    0
    Адрес:
    г.Волгодонск Роствской обл.
    А мне интересно и замеры я всетаки произведу :) и сообщу народу свое открытие :)
     
  16. topas

    topas Активный пользователь

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
    Поверьте, кэш творит чудеса, так что пусть тоже учавствует в замерах
     
  17. ShamahN

    ShamahN Активный пользователь

    С нами с:
    10 апр 2007
    Сообщения:
    1.449
    Симпатии:
    0
    Адрес:
    г.Волгодонск Роствской обл.
    topas
    Обязательно! Будет в общем три парралельные замера (очередность буду чередовать) по 10 повторений:
    1 - При механизме описанном ранее;
    2 - При механизме описанным тоже ранее, но немного позже;
    3 - Самый первый с использованием кэша!
    Кроме того, будет еще выведена дополнительная информация по моментам, косвенно полученным в результатах эксперимента.
    А пока, принимаются ставки!
    Я ставлю на то что описанный в самом начале и используемый мной метод+дополнительный индекс уделает всякие кеши и уж тем более постоянный пробег по полной выборке!
    :):):)
     
  18. topas

    topas Активный пользователь

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
    ну-ну :)
     
  19. S.t.A.M.

    S.t.A.M. Активный пользователь

    С нами с:
    10 сен 2007
    Сообщения:
    1.041
    Симпатии:
    0
    ShamahN
    Надо оптимизировать не запросы, а принцип построения дерева!
    Почитай тут:
    http://www.getinfo.ru/article610.html
     
  20. ShamahN

    ShamahN Активный пользователь

    С нами с:
    10 апр 2007
    Сообщения:
    1.449
    Симпатии:
    0
    Адрес:
    г.Волгодонск Роствской обл.
    S.t.A.M.
    спасибо... читаю! :)