27го ноября, Киев. Совместная конференция ZFConf Ukraine & MageConf

Posted in Events, ZendFramework on November 9th, 2010 by Yaroslav Vorozhko – Be the first to comment

27го ноября в Киеве пройдет бесплатная, международная совместная конференция ZFConf Ukraine & MageConf.

Конференция пройдет 27 ноября, в Киеве
Титульный спонсор конференции – компания Magento
Место: КиевЭкспоПлаза, ул. Салютная 2б, 3 павильон
Время: 27 ноября 2010 г. (с 11:00 до 19:00)
Длительность: 1 полный день
Формат: доклады в три потока и обсуждения на флипчарте (в перерывах)
Язык докладов: русский
Стоимость участия: бесплатно
Потоки: Zend Framework, PHP, Magento.

Доклады и Докладчики:

1. Встречайте Zend Framework 2.0
Александр Веремьев / Zend Framework Core команда (Zend Technologies)

2. Эволюция ZF: архитектура, шаблоны, рефакторинг
Виктор Фараздаги / Component Maintainer и Contributor ZF 2.0 (4C)

3. Юнит тестирование в Zend Framework 2.0
Ростислав Михайлив / Chief Developer / Software Architect (Gadu-Gadu)

4. Хранение, обработка и отдача статики с использованием \Zend \File. Опыт социальной сети starlook.ru
Кирилл Мокевнин / Senior developer (undev)

5. Чуть сложнее чем Singleton: аннотации, IOC, АОП
Кирилл Чебунин / Senior PHP Developer (Альпари)

6. Doctrine 2
Валерий Рабиевский / Team leader (stfalcon.com)

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

Следите за обновлениями на http://zfconf.org.ua

Отчет о Sphinx Search User Conference 2010

Posted in Events, Sphinx Search on October 30th, 2010 by Yaroslav Vorozhko – Be the first to comment

Занимаясь разработкой Sphinx Search приложений последние три года, я не смог упустить возможности посетить первую Sphinx Search User Conference.

Но, на конференцию я поехал не только как участник, а также как докладчик.
Тема моего выступления была “Sphinx Search Real Time индексы и их сравнение с обычными индексами”.

Конференция была организована в одном из корпусов МГУ(Московского Государственного Университета),
участники заняли места за партами, а докладчики сменяли друг друга за лекторской трибуной.

Московской Государственный Университет

Московской Государственный Университет

Открыл конференцию и провел первый доклад конечно же Андрей Аксенов.
Рассказав про общие понятия Sphinx Search, Андрей таким образом подготовил аудиторию к более сложным темам.

Андрей рассказывает про новый тип стрингов

Андрей рассказывает про новый тип стрингов

Следом за Андреем выступил Слава Крюков с докладом о построении высокомасштабируемых систем на базе Sphinx Search.
Доклад Славы был очень глубоким и интересным, поэтому к нему было больше всего вопросов во время кофе-брейка.

Слава Крюков с докладом про BoardReader

Следующим интересным докладом, был доклад главного гостя конференции Пети Зайцева, который рассказал про применение Sphinx совместно с MySQL и без него.

Вторая часть конференции прошла под эгидой применения Sphinx Search в интернет магазинах.
И закрывал конференцию мой доклад о Real Time индексах Sphinx Search.

В конце конференции был проведен круглый стол с разработчиками Sphinx и докладчиками.
Было много интересных вопросов и пожеланий, Андрей провел несколько конкурсов где раздал много футболок с большим глазом на спине. :)

Круглый стол с разработчиками Sphinx и докладчиками

Круглый стол с разработчиками Sphinx и докладчиками

Конференцию считаю прошедшей удачно!
Спасибо Андрей!

Моя презентация Sphinx Search RT indexes

Скрипт миграции обычных индексов на real time индексы Sphinx Search

Posted in Sphinx Search on September 22nd, 2010 by Yaroslav Vorozhko – Be the first to comment
Скрипт предназначен для заполнения и обнволения real time индексов. Скрипт выполняет похожую работу, которую делал sphinx indexer для обычных индексов.
Поэтому конфигурационный файл sources.ini практически повторяет конфигурацию блока source из sphinx.conf.

Скрипт предназначен для заполнения и обнволения real time индексов. Скрипт выполняет похожую работу, которую делал sphinx indexer для обычных индексов.

Поэтому конфигурационный файл sources.ini практически повторяет конфигурацию блока source из sphinx.conf.

Возможности

  • Заполнять индекс данными
  • Дописывать в индекс новые данные
  • Обновлять в индексе существующие данные
  • Выполнять pre и post sql запросы
  • Поддерживает ranged запросы

Установка

Скачайте архив из launchpad.net

Распакуйте его в любую директорию вашего веб сервера.

Откройте sources.ini, в этом файле уже определен один раздел, используйте его как пример.

Определять можно столько разделов, сколько потребуется.

Каждый раздел описывает один источник данных для одного real time индекса.

Для поддержки добавления новых данных в индекс без перезаписи старых, необходимо использовать счетчик id для источника данных.

Вы должны будете выполнить следующие шаги:

  • Создать таблицу для счетчиков
  • Добавить счетчики в таблицу
  • Изменить sql_query для поддержки $start и $end
  • Изменить sql_query_range для выборки минимального и максимального id используя таблицу счетчик
  • Изменить sql_query_post_index для обновления таблицы счетчика

Подробнее про счетчик вы можете прочитать в документации к Sphinx Search

Теперь когда мы закончили с конфигурацией, можно начать заполнение индекса.

Для этого просто запустить indexer.php

CODE:
  1. php indexer.php

Спасибо!

Желаю удачи!

Тестирование производительности Обычных, 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 индексы могуть стать хорошей заменой инкрементному индексу

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

Переходить ли на Sphinx Search real time индексы

Posted in Sphinx Search on September 20th, 2010 by Yaroslav Vorozhko – 2 Comments

Проблема обычных индексов

Основаня проблема обычных индексов заключается в скорости обновления.
Для того, чтобы обновить индекс необходимо его полностью перестраивать.

Для больших массивов данных, используется метод main + delta индексы.
Где main содержит основную часть данных, а delta - только последние изменения.

Таким образом, чтоб поддерживать индекс "свежим" необходимо перестраивать delta индекс, каждые 3-5 минут.
Но, чем больше становится delta индекс, тем дольше идет перестроение, поэтому delta индекс рекомендуется сбрасывать в
main индекс раз в сутки или неделю в зависимости от частоты обновления данных.

Отсюда возникает две проблемы:

  1. Из-за частой переиндексации система всегда нагружена.
  2. Данные попадают в индекс только спустя 3-5-10 минут.

Real time индексы

В версии 1.10 Sphinx включил поддержку нового типа индексов - real time индексы.
Основное преимущество и отличие от обычных индексов - это возможность обновить запись в индексе на "лету".
Также - это поддержка mysql протокола, что позволяет использовать существующие инструменты(mysql client, mysqldump) для работы с real time индексами.
Для обычных индексов доступ по mysql протоколу также поддерживается, но только в режиме чтения.
И - это SphinxQL, язык запросов основанный на SQL, поддерживающие такие операции как SELECT, DELETE, INSERT, REPLACE.

Но, в данный момент сущесвтует проблема с производительность в RT индексах на больших объемах данных.
Хотя, на малых объемах, скажем до 500.000 документов содержащих статьи из wikipedia, скорость работы не уступает обычным индексам.

Из этого можно сделать вывод, что простота работы и высокая скорость поиска на небольших объемах данных выгодно отличет real time
индексы от обычных индексов для delta (инкрементного) индекса.

Вывод
Real time индексы можно использовать как инкрементный delta индекс в Sphinx.
Это снизит нагрузку на сервер, и упростит обновление данных в инкрементном индексе.
А поддержка смешанных индексов позволит очень просто подключить RT индексы к работающему приложению.

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

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

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

Как мы видим миграция на RT индексы может быть сделана очень просто, начать можно с малого не трогая при этом основу работающей системы.

Всем желаю удачи в этом непростом, но интересном деле!

Первая Sphinx конференция в Москве 2010

Posted in Events, Sphinx Search on September 10th, 2010 by Yaroslav Vorozhko – 1 Comment

Sphinx открывает двери в свою первую конференцию в Москве, которая пройдет 24 Октября - участие в конференции бесплатное.

Программа

  • Андрей Аксенов, автор Sphinx, сделает доклад про текущие достижения Sphinx и планы развития проекта.
  • Петр Зайцев, CEO компании Percona и автор широко известного в узких кругах MySQL Performance Blog, расскажет о том, как Percona применяет Sphinx вместе с MySQL и вместо MySQL.
  • Ivinco, компания, которая оказывает услуги разработки и консалтинга с использованием LAMP(S) стека, сделает доклады про развертывание и поддержку многотерабайтного поискового кластера для Boardreader, сервиса поиска по форумам, индексирующего более 3 миллиардов документов и более 3 TB данных.
  • SuperJob.ru, ведущий рекрутинговый портал и Gorbushka.ru, популярный поисковик товаров, поделятся своими практическими знаниями про тонкости и специфику поиска в рекрутинге и поиска по товарам.
  • Разработчики Sphinx сделают несколько блиц-докладов про новые возможности, разработанные в последнее время.

Стоит ли мне поучаствовать?

Если вам интересно что-то из нижеперечисленного - то обязательно!

  • Текущие достижения Sphinx, новые возможности, и планы развития.
  • Практические применения Sphinx, тонкости и советы, и бесценный боевой опыт.
  • Возможность поделиться своими идеями с сообществом и повлиять на планы разработки.
  • Встреча с пользователями и командой разработчиков Sphinx.

Подробнее о конференции на сайте Sphinx Search.

До встречи!

Как я установливал MongoDB на Ubuntu 64bit

Posted in Development, Tips And Tricks on September 8th, 2010 by Yaroslav Vorozhko – Be the first to comment

MongoDB для Ubuntu устанавливается следующей командой

CODE:
  1. sudo apt-get install mongodb

После, по туториалу создал каталог для данных

CODE:
  1. mkdir -p /data/db/
  2.  
  3. chown `id -n` /data/db

Запускаю mongodb командой mongodb и получаю следующую ошибку:

CODE:
  1. mongo: error while loading shared libraries: libmozjs.so: cannot open shared object file: No such file or directory

Лучиться путем определения пути к libmozjs.so во время запуска mongodb или mongo клиента:

CODE:
  1. LD_LIBRARY_PATH=/usr/lib/xulrunner-`xulrunner --gre-version` mongodb

Теперь все работает.

Ждем пока мэинтейнеры пофиксят MongoDB зависимости.