Персональные инструменты
 

ADD-2011 (Рецензии Стаса Фомина)/Увеличиваем производительность MySQL в десятки раз используя HandlerSocket

Материал из CustisWiki

Перейти к: навигация, поиск

Доклад на по большому счету на тему скрещивания «ежа с ужом» — как бы добиться NoSQL-ништяков типа скорости, и собственно отсутствия SQL как эсперанто-посредника, при этом не слезая с привычного и проверенного MySQL, и сохраняя все его ништяки (включая SQL) для того, кому это действительно надо.

Таких подходов полно — вот, прямо к InnoDB можно пустить memcache (о чем тоже немного расскажет докладчик), ну и вообще см. обзор NOSQLя в MySQLе.

Плюсы этого — чистый, текстово-читаемый сетевой протокол (удобно для локализации проблем, тут докладчик рассказал байку про баги в libmemcached, которые он наблюдал в проекте с большой социальной сетью).

Доступ идет через нумерованные[1] каналы, которые почему то называются индексами (вызывает путаницу с индексами MySQL), возможно из-за того, что каждому каналу нужно сопоставить таблицу и mysql-индекс в ней.

Соотвественно, после этого можно простейшие запросы типа «ключ ?=<> →значение» набиваются в одну строчку этого текстового протокола (пересказывать протокол глупо, впрочем докладчик очень настаивал, чтобы перед работой вкуривали маны, а то его разработчики то пробелы вместо табов разделителями использовали, то на «читающий порт» подавали команды записи и т.п.).

Полно биндингов Java/Python/Ruby/Node.js, для PHP аж три разных, пара для питона и т.п.

Подход сам хорош и для фронтэнда — «список товаров» в вебмагазине, и даже для обработки статистики, когда статистику собирают не «парся логи», а оптимизированно засовывают в ту же базу данных.

Отдельная удобная фишка прямая трансляция GET-запросов NGINXом в (NGX_HSJSON) в этот Handler Socket с возвратом JSON-ответов, через что разумно реализовывать автокомплит в поиске.

Ну и по опыту докладчика, HS вполне на уровне классических key-value баз типа Memcache/Redis/Tokyo Tyrant (синтетический тест с одним соединением, без сети).

  1. Странный факт — говорят, что номера надо использовать маленькие, чтобы скорость была больше. Меня это пугает.