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