Немного определенй
Обычный индекс — это индекс, который имеет блок source в конфигурационном файле Sphinx и заполняется путем вызова утилиты indexer.
Real time (RT) — не имеет блока source, а содержит только определение полей и атрибутов. Заполнение RT индекса уже не является обязанностью утилит Sphinx, а ложиться на плечи разработчика приложения.
Смешанный индекс — это индекс, который образуется путем создания распределенного индекса из обычного индекса и RT индекса.
Пример смешанного индекса:
- index distributed
- {
- type = distributed
- local = plain_main_index
- local = real_time_increment_index
- }
В данном примере мы через один распределенный индекс можем обращаться одновременно к RT и обычным индексам.
Измерение производительности
Я провел несколько сравнительных тестов над всеми типами индексов, а именно:
- Сравнил использования HDD каждым из типов
- Сравнил скорость поиска по одиночному запросу
- Сравнил скорость поиска по мулти запросам
Все тесты проходили на четырех различных наборах данных. Данные были взяты из wikipedia и распределены на четыри части по:
10 тыс., 100 тыс., 1 млн. и 2 млн. записей.
Сравнение HDD
Я сравнил использование hdd, только для обычных и RT индексов.
Красное поле RT индексы.
Синее поле обычные индексы.
Как видно из диаграммы, RT индексы для 1 млн. и 2 млн. данных используют примерно на 20% больше места.
Но, Я считаю, что RT индексы все таки по этому показателю лучше, так как для обычных индексов при переиндексации требуется в 2 раза больше места чем сам индекс. Соответственно используя RT мы сможем экономнее использовать hdd на сервере.
Сравнение скорости поиска по одинчоному запросу
Для запросов я создал словарь из 1000 самых популярных слов из каждого индекса. И по этим словам выполнил запросы.
Красное поле RT индексы.
Синее поле обычные индексы.
Желтое поле смешанные индексы.
Из диаграммы мы видим, что на небольших индексах скорость поиска практически одинаковая.
В то время как на больших данных RT индексы существенно проигрывают обычным индексам, а смешанные индексы заняли положение посередине.
Сравнение скорости поиска по мулти запросам
Словарь я использовал тот же, что и для предыдущего теста, только поиск исполнял сразу по пять запросов паралельно.
Красное поле RT индексы.
Синее поле обычные индексы.
Желтое поле смешанные индексы.
Тут мы видим практически туже самую картину. На больших объемах RT индексы сильно проигрывают обычным индексам.
Но, стоит отметить, что производительность мультизапросов примерно в 5 раз лучше чем у одинчоных запросов.
Из этого можно сделать несколько выводов:
- RT индексы работают быстро только на малых масивах данных
- Для поддержки высокой производительности приложение стоит проектировать с поддержкой мульти запросов
- RT индексы могуть стать хорошей заменой инкрементному индексу
Благодарю за внимание.
Желаю удачи!
© Yaroslav Vorozhko for
Add to
Post tags:
Комментариев нет:
Отправить комментарий