БД быстрее файлов?

Май 09

Вроде везде говорится, что да.  При стандартном открытии файлов в пхп возможно и быстрее, но ведь можно считывать содержимое файла через системный вызов при помощи cat.

Сделал два файла, один подключался к базе, считывал заголовок этого блога, выводил его. Второй считывал файл в переменную и далее грепом выбирал заголовок. Результаты не в пользу бд: разброс значений от 0,047 мс до 0,128мс. Файлы стабильно показывали 0,05мс.
Интересовала скорость простого запроса, без сложных условий выборки, хотя и по файлам через системный вызов можно grep’ом отфильтровать как надо.

Усредненные результаты 10 запусков  обоих файлов:
БД: ~0.0832мс
Файл: ~0.0505мс

Сами скрипты:

$ cat testdb.php
<?php
$link = mysql_connect('localhost', 'db_user', 'db_pass');
mysql_select_db('db_name', $link);
$query =
mysql_query("SELECT option_value
FROM `wp_options` WHERE `option_id` = 2;");
$result = mysql_result($query, NULL);
echo $result;
mysql_close($link);
?>

$ cat testf.php
<?php
$name = exec("cat test.txt | grep Alex");
echo $name;
?>

Подсчитывал время так:

time php script.php

Возможно, это будет интересно…

11 Comments

Add your comment

  1. Qusko
    Май 09 at 17:19

    Довольно интересный материал… Благодарю,  Александр.

  2. lessless
    Май 09 at 18:38

    отлично, доверить передачу пользователю параметра для подстановки выполнения в коммандную строку :)

  3. Хех, базы данных нужны для хранения информации со сложной структурой. Нужно было сравнить хотя бы скорость считывания сериализованного массива из файла и той же информации из базы для интереса.

  4. Alex Volkov
    Май 09 at 20:25

    lessless, тут как бы нет призыва использовать файлы вместо бд. А параметры подстановки можно генерить и без участия пользователя, в базу же они генерятся.
    Тимофей Старицкий, ну я же написал там, что интересует скорость простого запроса без вложенных условий и конструкций ) А так да, все верно.

  5. Ad1ce
    Май 11 at 17:49

    Никогда не слышал, чтоб базы были быстрее файлов. Именно поэтому кэш хранят в файлах, а не в базе. Плюс базы в том,  что позволяет структуризовать информацию.

  6. Alex Volkov
    Май 11 at 18:15

    Ad1ce, базы быстрее. И чем сложнее требуется выборка, тем сильнее разница по скорости. Браузеры хранят кеш в файлах потому что кеш это и есть хтмл файлы, которые запрашиваются при совпадении урла с айди, которые кстати хранятся уже в базе (у меня так, линукс/фаерфокс, под виндой в реестре наверно хранятся). Да и скорость для кеша какбы не главный показатель.
    Под линухом кстати много прог юзают базы, тот же amarok, rhythmbox. Даже ася ))

  7. niga
    Май 13 at 10:23

    Тест хороший, но смысла в нем нет. На «боевом» сервере я бы не стал позволять к выполнению exec. Более актуальный тест будет при использовании php-функций для работы с файлами.

  8. Alex Volkov
    Май 13 at 11:30

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

  9. wlad2
    Май 15 at 23:16

    читал на форумах что файлы быстрей чем с БД, а тут еще и эксперемент доказал, так что выводы можно строить, хотя файлы больше места на хосте занимают.. вроде как..

  10. Alex Volkov
    Май 15 at 23:23

    wlad2, файлы занимают меньше места, база сама тоже ведь файл. Файлы проиграют базе при сложных выборках + тут системный вызов идет, а его не очень хорошо давать юзерам.

  11. Jeevee
    Июл 05 at 23:38

    Забавно конечно, но для более менее серьезных проектов файлы не применимы. Лучше озаботиться конфигурацией сервера и оптимизацией ОС.

Post a comment