О том, что кэширование может значительно увеличить скорость работы сайта, знают все. Но в некоторых случаях создание кэша – не самый лучший вариант. Например, есть скрипт интернет-магазина и таблица в базе данных с описаниями товаров и их ценами. Посетитель видит форму с помощью, которой можно найти все товары, которые попадают в заданный диапазон цен. Ясно, что создавать кэш для каждого сочетания цен будет неэффективно. Количество таких сочетаний измеряется десятками или сотнями тысяч. Выполнить поиск в базе – не проблема. Но меня заинтересовал другой вопрос. Не будет ли быстрее искать данные в текстовом файле, а не базе? В интернете готовых результатов тестирования я не нашел (наверное, искал плохо ). Поэтому решил написать собственный мини тест. Порядок тестирования был следующий.
Шаг 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 может оптимизировать выполнение запроса. В данном случае быстро были выполнены те запросы, результаты которых входили в предыдущие.