Posts Tagged ‘tests’

Тестирование производительности Обычных, Real Time и Смешанных индексов Sphinx Search

Posted in Sphinx Search on September 21st, 2010 by Yaroslav Vorozhko – Be the first to comment

Немного определенй

Обычный индекс - это индекс, который имеет блок source в конфигурационном файле Sphinx и заполняется путем вызова утилиты indexer.
Real time (RT) - не имеет блока source, а содержит только определение полей и атрибутов. Заполнение RT индекса уже не является обязанностью утилит Sphinx, а ложиться на плечи разработчика приложения.
Смешанный индекс - это индекс, который образуется путем создания распределенного индекса из обычного индекса и RT индекса.

Пример смешанного индекса:

CODE:
  1. index distributed
  2. {
  3. type = distributed
  4. local = plain_main_index
  5. local = real_time_increment_index
  6. }

В данном примере мы через один распределенный индекс можем обращаться одновременно к RT и обычным индексам.

Измерение производительности

Я провел несколько сравнительных тестов над всеми типами индексов, а именно:

  1. Сравнил использования HDD каждым из типов
  2. Сравнил скорость поиска по одиночному запросу
  3. Сравнил скорость поиска по мулти запросам

Все тесты проходили на четырех различных наборах данных. Данные были взяты из wikipedia и распределены на четыри части по:
10 тыс., 100 тыс., 1 млн. и 2 млн. записей.

Сравнение HDD

Я сравнил использование hdd, только для обычных и RT индексов.

hdd usage by RT and plain index

Красное поле RT индексы.
Синее поле обычные индексы.

Как видно из диаграммы, RT индексы для 1 млн. и 2 млн. данных используют примерно на 20% больше места.
Но, Я считаю, что RT индексы все таки по этому показателю лучше, так как для обычных индексов при переиндексации требуется в 2 раза больше места чем сам индекс. Соответственно используя RT мы сможем экономнее использовать hdd на сервере.

Сравнение скорости поиска по одинчоному запросу

Для запросов я создал словарь из 1000 самых популярных слов из каждого индекса. И по этим словам выполнил запросы.

single query performance tests

Красное поле RT индексы.
Синее поле обычные индексы.
Желтое поле смешанные индексы.

Из диаграммы мы видим, что на небольших индексах скорость поиска практически одинаковая.
В то время как на больших данных RT индексы существенно проигрывают обычным индексам, а смешанные индексы заняли положение посередине.

Сравнение скорости поиска по мулти запросам

Словарь я использовал тот же, что и для предыдущего теста, только поиск исполнял сразу по пять запросов паралельно.

multi query performance tests

Красное поле RT индексы.
Синее поле обычные индексы.
Желтое поле смешанные индексы.

Тут мы видим практически туже самую картину. На больших объемах RT индексы сильно проигрывают обычным индексам.
Но, стоит отметить, что производительность мультизапросов примерно в 5 раз лучше чем у одинчоных запросов.

Из этого можно сделать несколько выводов:

  • RT индексы работают быстро только на малых масивах данных
  • Для поддержки высокой производительности приложение стоит проектировать с поддержкой мульти запросов
  • RT индексы могуть стать хорошей заменой инкрементному индексу

Благодарю за внимание.
Желаю удачи!

Часть 1. Введение в исскуство Unit Тестирования на PHP

Posted in Development on January 15th, 2008 by Yaroslav Vorozhko – Be the first to comment

Автор: padraic
Оригинал: An Introduction to the Art of Unit Testing in PHP
Перевод: Ярослав Ворожко

unit_testing

 

Введение

В каждом языке программирования, тестирование является важным аспектом разработки. Если вы не тестируете свой код, то как вы будете знать, что получите то, что ожидаете?

Ручное тестирование может выполняется не регулярно и обычно в сокращенных рамках. Для тестирования исходного кода регулярно и глубоко применяют автоматические тесты, которые могут исполняються периодически. В PHP такие тесты обычно пишутся используя Unit Test framework - это фреймоврк, который позволяет тестировать исходный код приложения или библиотеки изолированными блоками функциональности, такими как классы или методы.

Как только блочное тестирование стало популярным, то это стало стандартом для таких приложений как Swiftmailer, Zend Framework и Symfony - все они используют блочное тестирование для проверки исходного кода.

Блочное тестирование часто видят как что то загадочно, съедающее время задачу - которая иногда должна исполняться! Но цель расходовать время на блочное тестирование - это улучшение качества вашего кода программы, уменьшение количества багов, большинство из которых выявляются на ранних этапах разработки, непрерывное тестирование предотвращается изменение поведения старого кода при написании нового, и предоставляет вам уверенность в вашем коде, что ваш код защищенный и чистый от багов. Также есть и другие преимущества блочного тестирования, но о них мы поговорим позже.

От себя добавлю:

В своей практике мне не часто приходилось исползовать блочное тестирование как инструмент создания новых проектов. Но сама идея и методика очень хорошие, но требуют много затрат на обучение и привыкание к написанию тестов до разработки или в процессе разработки для уже действующего кода. Но в долгосрочной перспективе - это составит вам большую услугу и сэкономит много времени на исправление ошибок, добавление нового функционала и на процессе внедрения нового программиста в разработку над проектом, который использует тестирование.