Home > Мои разработки > Свой поиск по сайту > Свой поиск: файлы или база данных. Собственно эксперимент.

Свой поиск: файлы или база данных. Собственно эксперимент.

В прошлой статье я анонсировал о выходе отчёта о сравнении двух методов поиска: по тексту и по базе данных. Немного проспавшись после напряжённой работы выкладываю собственно отчёт. Эта информация будет полезна вебмастерам, которые хотят организовать поиск по своему сайту, но не знают, как это сделать.Немного расширю информацию об условиях эксперимента.
1) Использование php для реализации поиска.
2) Поиск по двум (с хвостиком) миллионам строк. Строки представляют заголовки страниц в виде ссылок (чтобы упростить процедуру выборки).
3) Вывод всех вхождений.
4) Методы поиска: помещение в массив данных с выводом вхождений, с помощью оператора SELECT в MySQL.

Опыт номер один.
Поиск по текстовому файлу с 2,065,183 строками.
Объём файла: 130 мегабайт.
Информация из файла считывается и помещается в массив. Из массива осуществляется выборка.
Поисковый запрос: «Перу».
Время на поиск: 141,5 секунд.
Совершенно неприемлемый результат, выборка осуществляется в течение более двух минут. Кроме того, используется огромный объём оперативной памяти, что может быть невозможно на слабых хостингах.

Опыт номер два.
Поиск по 30 текстовым файлам, всего 2,065,183 строк. Разбитый на 30 кусков предыдущий пример. Файлы кусами примерно 4,4 мегабайта.
Объём информации прежний, 130 мегабайт.
Информация из файла считывается и помещается в массив. Из массива осуществляется выборка.
Поисковый запрос: «Перу».
Время на поиск: 49,56 секунд.

Почти в три раза быстрее, чем в предыдущем примере! Кроме того, умеренное потребление памяти, так как куски небольшие. Работает на относительно слабых хостингах.

Опыт номер три.
Поиск по базе данных MySQL. Была создана база данных с одной таблицей, в таблице одно поле. Все 2,065,183 находятся в этом поле.
Информация из базы данных считывается целиком и помещается в массив (оператор SELECT использован без условий). Из массива осуществляется выборка точно так же, как и в предыдущих примерах.
Поисковый запрос: «Перу».
Время на поиск: 118,3 секунды.
Оказалось, что неоптимизированный вариант считывания всех без разбора данных в массив с последующим отбором нужных ещё хуже, чем более или мене оптимизированный вариант поиска нужных строк в файлах из опыта номер два и сопоставим с чтением в массив огромного файла из опыта номер один. Как и в первом примере, время на поиск совершенно неприемлемое для пользователей.

Опыт номер четыре.
Поиск по базе данных MySQL. База данных та же, что и в опыте номер три с одной таблицей, в таблице одно поле. Все 2,065,183 находятся в этом поле.
Информация из базы данных считывается целиком и помещается в массив (оператор SELECT использован совместно с оператором WHERE). Сначала оператор SELECT выбирает и помещает в массив только строки, соответствующие определённому паттерну. После этого массив обрабатывается точно так же, как и в предыдущих случаях.
Поисковый запрос: «Перу».
Время на поиск: 3,4 секунды!

Это в 14,5 раз быстрее, чем поиск по файлам в лучшем варианте и почти в 35 раз быстрее, чем неоптизированный поиск из третьего примера. Конечно же, 3,4 секунды — это время вполне приемлемое для большинства пользователей, учитывая, что поиск производится по базе в 2 с чем-то миллионов страниц.

Таким образом, грамотное использование баз данных может существенно упросить задачу поиска данных. Она позволяет существенно снизить время на поиск нужной информации.
Использование поиска по файлам может быть полезно для относительно небольших сайтов в случае недоступности баз данных. Это даёт ответ на вопрос, как сделать по сайту поиск без базы данных.

+1
-1
  

26.08.2012 · Алексей · 2 комментария Просмотров: 169
Метки: , , , , , , , ,  · Рубрики: Свой поиск по сайту

2 комментария

  1. Евгений - 29.08.2012

    Можно узнать, как Вами был реализован поиск?

    Like or Dislike: Thumb up 0 Thumb down 1

  2. Алексей Алексей - 29.08.2012

    Почитайте статью внимательнее, там всё чётко указано. Выборка из массива или базы данных.

    Like or Dislike: Thumb up 0 Thumb down 1