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

MySQL

  • Lirck

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

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

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

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

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

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

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

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

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

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

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

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

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

    //тут код

    $end = microtime();
    $end = str_replace(' ', '', $end);
    echo $end - $start;


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

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

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

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

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

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

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


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


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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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


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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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