История одного мини теста или почему не стоит изобретать велосипед

О том, что кэширование может значительно увеличить скорость работы сайта, знают все. Но в некоторых случаях создание кэша – не самый лучший вариант.
Например, есть скрипт интернет-магазина и таблица в базе данных с описаниями товаров и их ценами. Посетитель видит форму с помощью, которой можно найти все товары, которые попадают в заданный диапазон цен.
Ясно, что создавать кэш для каждого сочетания цен будет неэффективно. Количество таких сочетаний измеряется десятками или сотнями тысяч.
Выполнить поиск в базе – не проблема. Но меня заинтересовал другой вопрос. Не будет ли быстрее искать данные в текстовом файле, а не базе?
В интернете готовых результатов тестирования я не нашел (наверное, искал плохо
). Поэтому решил написать собственный мини тест.
Порядок тестирования был следующий.
Шаг 1. Создал базу данных с таблицей для хранения данных. Таблица имела 3 поля:
id – PK;
description – описание товара;
price – цена.
Шаг 2. Написал небольшой скрипт, который заполнял таблицу случайными значениями. Всего было создано 10000 записей. Поле description имело длину 450 символов, которые выбирались случайным образом из заранее заданного набора, а значения в поле price изменялись в диапазоне от 0 до 5000.
Шаг 3. Написал еще один php скрипт, который создавал текстовый файл с данными из таблицы. Для сохранения данных использовал функцию serialize(). Размер файла получился чуть больше 5 МБ.
Шаг 4. Написал скрипт теста. Принцип работы был такой:
1) задавался диапазон цен;
2) выполнялся поиск в базе данных (использовал библиотеку AdoDB, судя по результатам тестов работает довольно быстро);
3) выполнялся поиск в текстовом файле (стандартные функции PHP);
4) измерялось время выполнения второго и третьего пунктов.
Тест запускался 20 раз. В результате получилось, что поиск в файле выполняется быстрее на 0,03 с.
Среднее время поиска для базы – 0,239 с, для файла – 0,205 с.
На графике можно посмотреть результаты отдельных тестов. По вертикальной оси отложено время поиска (в секундах), по горизонтальной – номер теста.

Шаг 5. Смотрю я на этот график… Как говориться: «no comments». Поиск в файле выполняется немного быстрее чем в базе, но ведь на сколько усложняется приложение. Каждую операцию записи в эту таблицу базы придется повторить для файла.
Спрашивается, зачем было искать обходные пути?
Нужно будет повесить себе на стену плакат: «Не изобретай велосипеды». Или заставку на рабочий стол сделать
.
До встречи!
P.S. Вы, наверное, заметили, что на графике время поиска в базе сильно изменяется. Это связано с тем, что в некоторых ситуациях MySQL может оптимизировать выполнение запроса. В данном случае быстро были выполнены те запросы, результаты которых входили в предыдущие.
Понравилась статья? Подпишитесь на продолжение
!
Опубликовано в MySQL, PHP, Web разработка
Комментарии (5)
Вы можете отслеживать обсуждение записи с помощью RSS 2.0 ![]()
Вы также можете оставить комментарий, или трекбек с Вашего сайта.







а при тестах в настройках mysql кеш(в смысле родной) был включён или нет?
Да, если "говорить" конкретно:
have_query_cache YES
query_cache_limit 1048576
query_cache_min_res_unit 4096
query_cache_size 8388608
query_cache_type ON
query_cache_wlock_invalidate OFF
Версия MySQL 5.0.45
Зашел на сайт нечаянно! И рад! Классно пишите! Спс!
____________________
http://zarevo.org/
Таблица то без индексов была?
Я пробовал и так, и так. В данном случае индексы роли практически не играли, т.к. данные были случайные и не повторялись.