ФорумПрограммированиеPHP для идиотов → MySQL

MySQL

  • Lirck

    Сообщения: ? Репутация: N Группа: Джедаи

    Spritz 22 июля 2008 г. 12:11

    Заметил, что некоторые крупные системы управления сайтом используют mysql + файлы (например «4site CMS»), а некоторые используют только файлы («TWL»). В каких случаях лучше использовать первое, а в каких второе?
    В «4site CMS» файлы используются для хранения статических страниц, при этом все страницы не в одном файле, а каждая в своем. Для динамических (новостей) используется MySQL.
    В «TWL» вообще только файлы…
  • Timur

    Сообщения: 1068 Репутация: N Группа: Джедаи

    Spritz 22 июля 2008 г. 12:22, спустя 10 минут 24 секунды

    Разработчики этой TWL видимо стремились к максимальной совместимости с любой площадкой. Не знаком с 4site CMS, но возможно в файлах хранится просто кэш страниц.
    Если у тебя есть возможность приобрести хостинг с СУБД используй её, потому что это просто, быстро и удобно.
  • Lirck

    Сообщения: ? Репутация: N Группа: Джедаи

    Spritz 22 июля 2008 г. 12:35, спустя 13 минут 32 секунды

    Что быстрее обработается?
    <?php
    $array = file_get_contents(&quot;$id.txt&quot;);
    $array = unserialize($array);
    echo &quot;$array[&#39;title&#39;]<br>\n&quot;;
    echo &quot;$array[&#39;content&#39;]<br>\n&quot;;
    ?>

    или
    $array = mysql_query(&quot;SELECT * FROM pages WHERE id = &#39;$id&#39;&quot;);
    $array = mysql_fetch_array($array);
    echo &quot;$array[&#39;title&#39;]<br>\n&quot;;
    echo &quot;$array[&#39;content&#39;]<br>\n&quot;;
  • Lirck

    Сообщения: ? Репутация: N Группа: Джедаи

    Spritz 22 июля 2008 г. 13:10, спустя 34 минуты 21 секунду

    Как вообще посчитать время выполнения скрипта?
    Делал так
    $start = microtime();
    $start = str_replace(&#39; &#39;, &#39;&#39;, $start);

    //тут код

    $end = microtime();
    $end = str_replace(&#39; &#39;, &#39;&#39;, $end);
    echo $end - $start;


    Время выполнения — 1.4E-5
    Хотя не может такой скрипт на моей машине 1 секунду выполнятся xD
  • Timur

    Сообщения: 1068 Репутация: N Группа: Джедаи

    Spritz 22 июля 2008 г. 14:19, спустя 1 час 9 минут 10 секунд

    что бы посчитать время: microtime(1); (т.е. с параметром 1 или true). Только в данном случае считать нечего.
  • Lirck

    Сообщения: ? Репутация: N Группа: Джедаи

    Spritz 22 июля 2008 г. 14:35, спустя 16 минут 32 секунды

    Ну вот и результаты моего тестирования
    MySQL:
    $timer->start();
    for ($i = 0; $i < 100; $i++)
    {
    $array = mysql_query(&quot;SELECT * FROM pages WHERE id = &#39;$i&#39;&quot;);
    $array = mysql_fetch_array($array);
    echo &quot;<br>$array[title]<br>\n&quot;;
    echo &quot;$array[content]<hr>\n&quot;;
    }
    echo &#39;<br>&#39; . $timer->stop(); //0.01 сек.


    Файлы:
    $timer->start();
    for ($i = 0; $i < 100; $i++)
    {
    $array = file_get_contents(&quot;db/$i.txt&quot;);
    $array = unserialize($array);
    echo &quot;<br>$array[title]<br>\n&quot;;
    echo &quot;$array[content]<hr>\n&quot;;
    }
    echo &#39;<br>&#39; . $timer->stop(); //0.1 сек.


    Получается, что при равных условиях, MySQL работает в 10 раз быстрее файлов!
  • Timur

    Сообщения: 1068 Репутация: N Группа: Джедаи

    Spritz 22 июля 2008 г. 14:56, спустя 20 минут 19 секунд

    ну да, прям бенчмрак )
  • AlexB

    Сообщения: 4288 Репутация: N Группа: в ухо

    Spritz 22 июля 2008 г. 15:41, спустя 44 минуты 53 секунды


    Получается, что при равных условиях, MySQL работает в 10 раз быстрее файлов!
    Недаром говорят, что есть ложь, наглая ложь и бенчмарки. Фенька в том, что в реальной жизни БД обрабатывает отнюдь не один единственный запрос. Таким образом ты попадаешь в очередь, это раз. Скорость работы БД зависит от размера таблицы, и когда она будет достаточно большой, то результат будет не таким оптимистичным, это два.
  • vasa_c

    Сообщения: 3127 Репутация: N Группа: в ухо

    Spritz 23 июля 2008 г. 0:24, спустя 8 часов 43 минуты 20 секунд

    +ещё unserialize и echo едять 9 из этих 10 раз
  • Trej Gun

    Сообщения: 5299 Репутация: N Группа: в ухо

    Spritz 23 июля 2008 г. 2:55, спустя 2 часа 31 минуту 7 секунд

    Получается, что при равных условиях, MySQL работает в 10 раз быстрее файлов!

    средняя температура по больнице 36,6!
  • sap

    Сообщения: ? Репутация: N Группа: Кто попало

    Spritz 23 июля 2008 г. 4:39, спустя 1 час 44 минуты 4 секунды


    $timer->start();
    for ($i = 0; $i < 100; $i++)
    {
       $array = mysql_query(&quot;SELECT * FROM pages WHERE id = &#39;$i&#39;&quot;);
       $array = mysql_fetch_array($array);
       echo &quot;
    $array[title]
    \n&quot;;
       echo &quot;$array[content]<hr>\n&quot;;
    }
    echo &#39;
    &#39; . $timer->stop(); //0.01 сек.


    Ужас! Нельзя использовать запросы в цикле. Какое уж тут быстродействие.
  • Trej Gun

    Сообщения: 5299 Репутация: N Группа: в ухо

    Spritz 23 июля 2008 г. 4:51, спустя 12 минут 15 секунд

    sap, для замера можно
    потом время поделить на количество циклов и будет среднее время запроса
  • Lirck

    Сообщения: ? Репутация: N Группа: Джедаи

    Spritz 23 июля 2008 г. 5:48, спустя 56 минут 59 секунд

    Ужас! Нельзя использовать запросы в цикле. Какое уж тут быстродействие.
    А как еще можно сделать?
  • Lirck

    Сообщения: ? Репутация: N Группа: Джедаи

    Spritz 23 июля 2008 г. 5:50, спустя 1 минуту 57 секунд

    ааа, моно where не указывать..
  • sap

    Сообщения: ? Репутация: N Группа: Кто попало

    Spritz 23 июля 2008 г. 11:15, спустя 5 часов 25 минут 3 секунды

    Примерно так:
    $result = mysql_query (&#39;SELECT `title`, `content` FROM `pages` ORDER BY `id` LIMIT 100&#39;);
    while ($row = mysql_fetch_array ($result))
    echo $row[&#39;title&#39;].&quot;\n&quot;.$row[&#39;content&#39;].&quot;<hr>\n&quot;;

    Будет значительно быстрее.

Пожалуйста, авторизуйтесь, чтобы написать комментарий!