SlideShare a Scribd company logo
1 of 55
Выбираем поиск 
умом головы 
Андрей Аксёнов, Sphinx
Про что доклад 
• Надо поиск, какой взять? 
– Дык в MySQL/Postgres/Mongo чота типа есть и агонь 
– Взять Sphinx, C++ не подведёт 
– Взять Lucene/Solr/Elastic, Java не подведёт 
– Самим всё написать, мы ж мужики 
– Купить крутейший коммерческий, например
Про что доклад 
• Надо поиск, какой взять? 
• Чем и как MySQL vs Postgres vs Mongo vs Sphinx vs 
Lucene vs … оно всё внутри вообще отличается? 
• Как правильно бенчмаркать? 
• Что ещё нужно сравнивать?
Про что доклад 
• Надо поиск, какой взять? 
– Разумеется, Sphinx! 
– Разумеется, с контрактом на поддержку! 
– Разумеется, чем больше нулей, тем лучше! 
– Всё, доклад окончен, расходимся
Варианты – в порядке 
усложнения
Самописный поиск за 1 час 
• create table X ( 
keyword varchar(255) not null, 
docid integer primary key not null ); 
• insert into X values (“hello”, 123), (“world”, 123); 
• select * from X a, X b where 
a.keyword=“hello” and 
b.keyword=“world” and 
a.docid=b.docid
Самописный поиск за 1 вечер 
• Можно даже успеть вкрутить еще всякое! 
– Стеммер, libstemmer и его порты 
– Морфология, pyrmophy2, phpmorphy (aot нельзя) 
– Ранжирование, BM25 
• alter table X add column termfreq integer 
• create table D (keyword varchar(255), docfreq integer) 
• select …
Встроенный в базу поиск 
• Согласно вендору базы, Дичайше Круче Всех 
• На самом деле, Неизбежно Выйдет Говнецо (*) 
– Все базы в первую очередь про OLAP, ох 
– Великие Древние ещё также умеют транзакции, ууух 
– Типично муторно масштабировать 
– Синтаксис, ранжирование, эффективность? Не, не слышали 
(*) Разумеется, именно Ваш Любимый Вендор не такой!
Самописный поиск за 10 лет 
• Можно успеть вкрутить ещё всякое!!! 
– Внятный формат индекса 
– Поддержка атрибутивки 
– Синтаксис запросов 
– Ранжирование 
– Кластеризация 
• Каждый пункт = N переделок, M лет
Внешний поиск 
• FOSS (free, open source) 
– Sphinx 
– Lucene + сервера поверх (Solr, Elastic) 
• Коммерческие 
– FAST, Endeca, Autonomy, Verity… куча вендоров 
– Отдельный мир, обязательно Sharepoint и 4-5 нулей 
– Интеграция, поддержка, функционал часто хтонические
Так своё писать или как!? 
• Как ни странно, иногда надо 
– Core product (Google, Yandex, Bing…) 
– Спецтребования (“хочу взлетать в 16 KB памяти…”) 
• Ключевое, осознавать масштаб бедствия 
– У нас вот получается довольно компактно 
– Sphinx 0.1 = ~1K LOC, Sphinx 2.x = ~120K LOC 
– Больше фичей и-или “сопливый” код = ~1..10M+ LOC
Так своё писать или как!? 
• 99%, что вам – не надо 
– Мало усилий => так себе и получится 
– Много усилий => это зачем? 
• Берите базу, берите Sphinx, берите Lucene & spawn 
• Бегите от “заказчиков”, у которых нету $10 на VPS!!!
На что смотреть?
А чем НеСвои отличаются-то? 
• Ууу… 
• Отличаются метод доставки данных; форматы 
индекса; скорость индексации; размеры индекса; 
требования к RAM; механизмы масштабирования; 
API доступа; функционал текстового поиска; скорость 
текстового поиска, причем от вида запроса; скорость 
НЕтекстового поиска; добавочные функции (геопоиск, 
фасеты, подсказки, сниппеты); ранжирование; 
расширяемость…
Отличается ВСЁ!!!
Но, хорошие новости!
Отличия в массе…
ПОФИГУ!!!
Что сравнивать? 
• Сравнивать надо фактически важное 
– Не умеют не только лишь все 
– Мало кто может это делать 
• У каждого свои требования, они ортогональны 
– Качество поиска VS супербыстрый булев поиск? 
– Текстовый поиск VS атрибутивка? 
– Масштабирование на терабайты VS индекс на 1 GB?
Про отличия чуть подробнее 
• Совсем подробно нельзя – уйдет 3 дня 
• Поэтому – очень кратко, по верхам 
• 3 категории = (1) базы, (2) FOSS, (3) commercial 
• 4 мегаоси = (1) эффективность, (2) функционал, 
(3) масштабируемость, (4) интеграция
Performance Functions Scaling Integration 
DBMS 1..2 1..2 1..3 5+ 
FOSS 
(Sphinx, Lucene) 
3..5 4..5 3..5 3..4 
Commercial 1..5 1..5 1..5 3..4 
DIY 1d..1m 1* 1* 1* 1*
Правильно читаем таблицу 
• Типичная база = хреновенькие скорость, функционал, 
масштабируемость… зато отличная интеграция! 
• Типичный FOSS = хорошо или отлично С/Ф/М; 
интеграция окей (но очевидно хуже встроенного) 
• Commercial = возможны адовые попадосы по любому 
параметру за свои же деньги, в целом не впечатляет 
• DIY = в общем будет очень плохо; но в частностях, 
возможно, невероятно хорошо
Внутренние различия, 
Sphinx vs Lucene
Sphinx vs Lucene 
• Поговорим немного про “а что внутри” 
• Какие сходства, откуда растут отличия 
• Sphinx = сервер, C++ (библиотека “как бы” есть) 
• Lucene = библиотека, Java 
• Solr = сервер, Java 
• Elastic = сервер, Java
Sphinx 2.x vs 3.x 
• Долго делаем, всякому научились 
• Теперь переделываем внутри много всего 
• Некоторые переделки Поменяют Всё, поэтому!
Sphinx vs Lucene 
• Что одинаковое? 
– Идеология “инвертированный файл” 
– Всё начинается от текстового поиска 
– Отдельно довески про атрибутивку 
• Что это значит? 
– “Тупо поиск” работает принципально одинаково 
– Детали реализации, однако, могут менять всё
Sphinx vs Lucene 
• Что разное внутри? 
– Формат хранения ключевиков, постингов 
– Формат хранения атрибутов 
– “Привычки” внутреннего кеширования 
– “Фокус” матчилки 
• Что это значит?
Про формат постингов 
• Sphinx 2.x = общие словари, списки по всем полям 
• Lucene = отдельные по каждому полю 
– Матчинг в “редком” поле = Lucene “О-быстрее” 
– Матчинг по куче полей = Lucene “О-медленнее” 
– Матчинг со взвешиванием = Lucene “О-медленнее” 
– Нумерация полей = Sphinx 2.x ограничен 256 полями, 
индекс “О-больше” по размеру 
– Куча полей, куча уникальных “слов” = плохо везде (словарь)
Про формат атрибутов 
• Sphinx 2.x = in-memory, row-based attr-only table 
• Lucene = on-disk, row-based docstore + кеш кеш кеш 
– Доступ в Sphinx = in-memory hash lookup 
– Доступ в Lucene = как бы disk read, поэтому кеш кеш кеш 
– Sphinx = можно смешать schemaful/schemaless 
– Lucene = полный schemaless, поэтому кеш кеш кеш  
– Зато у нас в 2.x дурацкие исторические ограничения 
Про формат документов 
• Lucene = хранилка документов есть 
• Sphinx 2.x = хранилки документов нет 
• Sphinx 3.x = хранилка документов тоже есть 
– Тоже перерастаем в странную СУБД 
– Тоже disk based, тоже LZ4 
– Принципиально улучшить не удалось
Про кеширование 
• Sphinx = запрос надо уметь считать адово быстро 
• Lucene = скорость вторична, всё закешируем! 
– Sphinx = внутренних кешей почитай нет  
– Lucene = кешируется ВСЁ, местами хрен отключишь 
– Делать адекватные бенчмарки это местами АД 
• Xapian (внезапно) = оптимизация под дефолтный, 
непрактичный юзкейс
Про “фокус” матчилки 
• Sphinx 2.x = позиции! ранжирование! релевантность! 
фиксированный бюджет памяти! 
• Lucene = не-не-не, булев матчинг и может BM25; 
памяти побольше тупо ставь 
– Sphinx 2.x = неидеально c булевым поиском 
– Sphinx 3.x = думаем про отдельный lightweight code path… 
и убрать бюджетирование, муахахаха 
– Lucene = неидеально с ранжированием/позициями
Итого 
• Концептуально одинаково (инвертированный файл) 
• Довольно разные реализации 
• “Детали реализации” меняют всё, в разы
Внешние различия
Что на этаж выше? 
• Sphinx vs Solr/Elastic, что одинаковое? 
– Везде некий API (SphinxQL, REST/XML, REST/JSON) 
– Везде завелись RT индексы 
– Везде развелся schemaless/JSON (в разной мере) 
– Везде как минимум агрегация результатов с кластера 
– Везде поддержка атрибутивки, ряда допфункций 
– Везде, что странно, “просто поиск” как-то работает!!! 
– Коммодитизация…
Что на этаж выше? 
• Sphinx vs Solr/Elastic, что разное? 
– S/E, репликация, автошардинг, REST, “реверсные” поиски, 
менеджмент кластера (почти всё тоже делаем для 3.0) 
– Sphinx, встроенная морфология, “сложное” ранжирование, 
считалка выражений 
• Всегда разный “эзотерический” (?) функционал 
– Sphinx, плохо помню! Zones, blend_chars, итп? 
– S/E, плохо знаю! Per-field mappings, nested docs итп?
Так где идеал?
Идеала нет!!! 
• Мне не нравится, как устроен Sphinx 2.x 
• Мне не нравится, как устроен Lucene 
• И в Sphinx 3.0 мне тоже пока не всё нравится!!!
Очень много букв!
Дай хоть забенчим!
Как “правильно” бенчмаркать 
• На оценку 3 = берем разные системы, делаем к ним 
одинаковый запрос, сравниваем время 
• На оценку 4 = повторяем запрос N раз, считаем 
среднее время, чтобы кеш прогрело и не дрожало 
• На оценку 5 = выкидываем 1й прогон всегда и даже 
выкидываем outliers, считаем среднее без них
Тёплое != мягкое 
• Где ошибка? 
• “берем разные системы, делаем к ним одинаковый 
запрос”… 
• Одинаковый запрос 
• ОДИНАКОВЫЙ ЗАПРОС
Marketing-driven defaults 1 
• “Одинаковый запрос” по умолчанию очень разный 
• Sphinx, поиск по умолчанию = strict-AND, “среднее” 
proximity+bm15 ранжирование, анализ позиций 
• Lucene, поиск по умолчанию = OR (вроде), “легкое” 
bm25 ранжирование, почти булев поиск 
• Xapian (внезапно!) = top-N по ихнему bm25!!! 
• …и это еще цветочки!!!
Marketing-driven defaults 2 
• Повторные запросы? 
• Sphinx = честно вычисляем всё заново, кешируется 
только дисковое чтение, да и то на уровне OS 
• Lucene = на всех уровнях есть внутренние кеши, 
некоторые невозможно отключить никак 
– Нужна долбежка многими разными запросами 
– Повтор 1 запроса подряд = обмеряем отдачу из кеша 
– Повтор пакета из 10-20 запросов = в общем-то тоже
Marketing-driven defaults 3 
• Сниппеты, прям шедевр! 
• “А чё у вас в N раз медленнее, чем Solr?” 
– Поддержка синтаксиса VS bag-of-words 
– Произвольный текст VS только преиндексированный 
– И ключевая “оптимизация” Solr... 
– Зачем подсвечивать всё, если можно первые 64 KB?!
Мы на горе всем буржуям 
• Поломаем совместимость!!! 
• Но исправим дефолты 
Что делать-то?
Так как выбирать-то?!!! 
Все кандидаты... 
…хороши!
Идеальная Ситуация 
• Определяем реальные ключевые требования 
• Слегка изучаем все сравниваемые системы (увы!) 
• Делаем действительно сходные запросы 
• Моделируем боевую нагрузку, помним про кеши 
• Смотрим функционал (что реально критично?) 
• Прикидываем TCO
Помним Общие Моменты 
• База = забудь про функционал и скорость, но удобно 
• Sphinx, Lucene et al = ср. быстро и функционально; по 
разным виды запросов могут сильно отличаться 
– Несколько разный функционал и, похоже, “фокус” 
– Сравнивать и мерить нужное, иначе (уже+пока) никак 
• Коммерческие = неожиданные подвохи, TCO 
• Дефолтные настройки могут удивить
Делаем Правильный Выбор 
• Выбираем систему X, т.к. 
– Друг Вася пользуется! 
– Знакомый Петя хвалил! 
– На Хабре чота писали вроде крутое! 
– В компанию пришел интерн с опытом! (делал homepage) 
• Выбираем систему Y, т.к. 
– Она дорогая от известного мега-производителя 
– И деньги очень нужны имеет убедительные плюсы
Вопросы? 
Для стеснительных: 
shodan@sphinxsearch.com

More Related Content

What's hot

С чего начать внедрение Hadoop в компании. Доклад Алексея Еремихина (Badoo).
С чего начать внедрение Hadoop в компании. Доклад Алексея Еремихина (Badoo). С чего начать внедрение Hadoop в компании. Доклад Алексея Еремихина (Badoo).
С чего начать внедрение Hadoop в компании. Доклад Алексея Еремихина (Badoo). Badoo Development
 
Бинарные (файловые) хранилища- страшная сказка с мрачным концом
Бинарные (файловые) хранилища- страшная сказка с мрачным концомБинарные (файловые) хранилища- страшная сказка с мрачным концом
Бинарные (файловые) хранилища- страшная сказка с мрачным концомDaniel Podolsky
 
Где живут Ваши объявления / Тюрин Михаил (Avito)
Где живут Ваши объявления / Тюрин Михаил (Avito)Где живут Ваши объявления / Тюрин Михаил (Avito)
Где живут Ваши объявления / Тюрин Михаил (Avito)Ontico
 
RTB DSP на языке Go: укрощение buzzwords
RTB DSP на языке Go: укрощение buzzwordsRTB DSP на языке Go: укрощение buzzwords
RTB DSP на языке Go: укрощение buzzwordsDaniel Podolsky
 
Отладка производительности приложения на Erlang / Максим Лапшин (Erlyvideo)
 Отладка производительности приложения на Erlang / Максим Лапшин (Erlyvideo) Отладка производительности приложения на Erlang / Максим Лапшин (Erlyvideo)
Отладка производительности приложения на Erlang / Максим Лапшин (Erlyvideo)Ontico
 
Open source субд глазами обычного программиста
Open source субд глазами обычного программистаOpen source субд глазами обычного программиста
Open source субд глазами обычного программистаSlach
 
Cоциальный граф "Одноклассников" в myTarget
Cоциальный граф "Одноклассников" в myTargetCоциальный граф "Одноклассников" в myTarget
Cоциальный граф "Одноклассников" в myTargetOleg Tsarev
 
Асинхронная репликация без цензуры: архитектурные проблемы MySQL, или почему ...
Асинхронная репликация без цензуры: архитектурные проблемы MySQL, или почему ...Асинхронная репликация без цензуры: архитектурные проблемы MySQL, или почему ...
Асинхронная репликация без цензуры: архитектурные проблемы MySQL, или почему ...Oleg Tsarev
 
Олег Бартунов (ГАИШ МГУ), Александр Коротков (Интаро-Софт)
Олег Бартунов (ГАИШ МГУ), Александр Коротков (Интаро-Софт)Олег Бартунов (ГАИШ МГУ), Александр Коротков (Интаро-Софт)
Олег Бартунов (ГАИШ МГУ), Александр Коротков (Интаро-Софт)Ontico
 
101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов ...
101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов ...101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов ...
101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов ...Ontico
 
опыт построения и эксплуатации большого файлового хранилища
опыт построения и эксплуатации большого файлового хранилищаопыт построения и эксплуатации большого файлового хранилища
опыт построения и эксплуатации большого файлового хранилищаDaniel Podolsky
 
Спасение 6 миллионов файлов в условиях полного Хецнера
Спасение 6 миллионов файлов в условиях полного ХецнераСпасение 6 миллионов файлов в условиях полного Хецнера
Спасение 6 миллионов файлов в условиях полного ХецнераDaniel Podolsky
 
MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петру...
MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петру...MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петру...
MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петру...Ontico
 
NoSQL - коротко о главном / Сергей Туленцев (TextMaster)
NoSQL - коротко о главном / Сергей Туленцев (TextMaster)NoSQL - коротко о главном / Сергей Туленцев (TextMaster)
NoSQL - коротко о главном / Сергей Туленцев (TextMaster)Ontico
 
Andrew Aksyonoff "Архитектура вокруг поиска"
Andrew Aksyonoff "Архитектура вокруг поиска"Andrew Aksyonoff "Архитектура вокруг поиска"
Andrew Aksyonoff "Архитектура вокруг поиска"Fwdays
 
Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)
Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)
Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)Ontico
 
libfpta: в памяти, с персистентностью, быстрее хайпа
libfpta: в памяти, с персистентностью, быстрее хайпаlibfpta: в памяти, с персистентностью, быстрее хайпа
libfpta: в памяти, с персистентностью, быстрее хайпаLeonid Yuriev
 
PG Day'14 Russia, PostgreSQL в avito.ru, Михаил Тюрин
PG Day'14 Russia, PostgreSQL в avito.ru, Михаил ТюринPG Day'14 Russia, PostgreSQL в avito.ru, Михаил Тюрин
PG Day'14 Russia, PostgreSQL в avito.ru, Михаил Тюринpgdayrussia
 

What's hot (20)

С чего начать внедрение Hadoop в компании. Доклад Алексея Еремихина (Badoo).
С чего начать внедрение Hadoop в компании. Доклад Алексея Еремихина (Badoo). С чего начать внедрение Hadoop в компании. Доклад Алексея Еремихина (Badoo).
С чего начать внедрение Hadoop в компании. Доклад Алексея Еремихина (Badoo).
 
Бинарные (файловые) хранилища- страшная сказка с мрачным концом
Бинарные (файловые) хранилища- страшная сказка с мрачным концомБинарные (файловые) хранилища- страшная сказка с мрачным концом
Бинарные (файловые) хранилища- страшная сказка с мрачным концом
 
Где живут Ваши объявления / Тюрин Михаил (Avito)
Где живут Ваши объявления / Тюрин Михаил (Avito)Где живут Ваши объявления / Тюрин Михаил (Avito)
Где живут Ваши объявления / Тюрин Михаил (Avito)
 
RTB DSP на языке Go: укрощение buzzwords
RTB DSP на языке Go: укрощение buzzwordsRTB DSP на языке Go: укрощение buzzwords
RTB DSP на языке Go: укрощение buzzwords
 
Отладка производительности приложения на Erlang / Максим Лапшин (Erlyvideo)
 Отладка производительности приложения на Erlang / Максим Лапшин (Erlyvideo) Отладка производительности приложения на Erlang / Максим Лапшин (Erlyvideo)
Отладка производительности приложения на Erlang / Максим Лапшин (Erlyvideo)
 
Open source субд глазами обычного программиста
Open source субд глазами обычного программистаOpen source субд глазами обычного программиста
Open source субд глазами обычного программиста
 
Cоциальный граф "Одноклассников" в myTarget
Cоциальный граф "Одноклассников" в myTargetCоциальный граф "Одноклассников" в myTarget
Cоциальный граф "Одноклассников" в myTarget
 
Асинхронная репликация без цензуры: архитектурные проблемы MySQL, или почему ...
Асинхронная репликация без цензуры: архитектурные проблемы MySQL, или почему ...Асинхронная репликация без цензуры: архитектурные проблемы MySQL, или почему ...
Асинхронная репликация без цензуры: архитектурные проблемы MySQL, или почему ...
 
Олег Бартунов (ГАИШ МГУ), Александр Коротков (Интаро-Софт)
Олег Бартунов (ГАИШ МГУ), Александр Коротков (Интаро-Софт)Олег Бартунов (ГАИШ МГУ), Александр Коротков (Интаро-Софт)
Олег Бартунов (ГАИШ МГУ), Александр Коротков (Интаро-Софт)
 
101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов ...
101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов ...101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов ...
101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов ...
 
опыт построения и эксплуатации большого файлового хранилища
опыт построения и эксплуатации большого файлового хранилищаопыт построения и эксплуатации большого файлового хранилища
опыт построения и эксплуатации большого файлового хранилища
 
Спасение 6 миллионов файлов в условиях полного Хецнера
Спасение 6 миллионов файлов в условиях полного ХецнераСпасение 6 миллионов файлов в условиях полного Хецнера
Спасение 6 миллионов файлов в условиях полного Хецнера
 
MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петру...
MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петру...MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петру...
MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петру...
 
NoSQL - коротко о главном / Сергей Туленцев (TextMaster)
NoSQL - коротко о главном / Сергей Туленцев (TextMaster)NoSQL - коротко о главном / Сергей Туленцев (TextMaster)
NoSQL - коротко о главном / Сергей Туленцев (TextMaster)
 
Andrew Aksyonoff "Архитектура вокруг поиска"
Andrew Aksyonoff "Архитектура вокруг поиска"Andrew Aksyonoff "Архитектура вокруг поиска"
Andrew Aksyonoff "Архитектура вокруг поиска"
 
Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)
Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)
Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)
 
libfpta: в памяти, с персистентностью, быстрее хайпа
libfpta: в памяти, с персистентностью, быстрее хайпаlibfpta: в памяти, с персистентностью, быстрее хайпа
libfpta: в памяти, с персистентностью, быстрее хайпа
 
PG Day'14 Russia, PostgreSQL в avito.ru, Михаил Тюрин
PG Day'14 Russia, PostgreSQL в avito.ru, Михаил ТюринPG Day'14 Russia, PostgreSQL в avito.ru, Михаил Тюрин
PG Day'14 Russia, PostgreSQL в avito.ru, Михаил Тюрин
 
Барнаул15
Барнаул15Барнаул15
Барнаул15
 
Devconf15
Devconf15Devconf15
Devconf15
 

Viewers also liked

системный анализ и реинжиниринг
системный анализ и реинжинирингсистемный анализ и реинжиниринг
системный анализ и реинжинирингAleksandr Barmin
 
Александр Воинов - Тренды Web
Александр Воинов - Тренды WebАлександр Воинов - Тренды Web
Александр Воинов - Тренды WebDrupalSib
 
Реинжиниринг бизнес-процессов, как результат внедрения программного обеспечения.
Реинжиниринг бизнес-процессов, как результат внедрения программного обеспечения.Реинжиниринг бизнес-процессов, как результат внедрения программного обеспечения.
Реинжиниринг бизнес-процессов, как результат внедрения программного обеспечения.Uzbekistan Rugby Federation
 
Евгений Ильин. Drupal + Solr: Яндекс.Маркет своими руками
Евгений Ильин. Drupal + Solr: Яндекс.Маркет своими рукамиЕвгений Ильин. Drupal + Solr: Яндекс.Маркет своими руками
Евгений Ильин. Drupal + Solr: Яндекс.Маркет своими рукамиDrupalSib
 
Lucene in odnoklassniki.ru
Lucene in odnoklassniki.ruLucene in odnoklassniki.ru
Lucene in odnoklassniki.ruDmitry Buzdin
 
Поиск на своем сайте, обзор open source решений
Поиск на своем сайте, обзор open source решенийПоиск на своем сайте, обзор open source решений
Поиск на своем сайте, обзор open source решенийaragozin
 
Индексируй неиндексирумое
Индексируй неиндексирумоеИндексируй неиндексирумое
Индексируй неиндексирумоеAlexander Byndyu
 
Производительность параметрического поиска на основе опенсорс-платформы
Производительность параметрического поиска на основе опенсорс-платформыПроизводительность параметрического поиска на основе опенсорс-платформы
Производительность параметрического поиска на основе опенсорс-платформыYandex
 
Индексируй неиндексирумое
Индексируй неиндексирумоеИндексируй неиндексирумое
Индексируй неиндексирумоеTimur Rakhmatillaev
 
Строим плот - Как не утонуть в данных
Строим плот - Как не утонуть в данныхСтроим плот - Как не утонуть в данных
Строим плот - Как не утонуть в данныхVitebsk Miniq
 
Движение по хрупкому дну / Сергей Караткевич (servers.ru)
Движение по хрупкому дну / Сергей Караткевич (servers.ru)Движение по хрупкому дну / Сергей Караткевич (servers.ru)
Движение по хрупкому дну / Сергей Караткевич (servers.ru)Ontico
 
Антон Терехов "Промышленные e-commerce платформы. Опыт поиска."
Антон Терехов "Промышленные e-commerce платформы. Опыт поиска."Антон Терехов "Промышленные e-commerce платформы. Опыт поиска."
Антон Терехов "Промышленные e-commerce платформы. Опыт поиска."elenae00
 

Viewers also liked (13)

code4russia
code4russiacode4russia
code4russia
 
системный анализ и реинжиниринг
системный анализ и реинжинирингсистемный анализ и реинжиниринг
системный анализ и реинжиниринг
 
Александр Воинов - Тренды Web
Александр Воинов - Тренды WebАлександр Воинов - Тренды Web
Александр Воинов - Тренды Web
 
Реинжиниринг бизнес-процессов, как результат внедрения программного обеспечения.
Реинжиниринг бизнес-процессов, как результат внедрения программного обеспечения.Реинжиниринг бизнес-процессов, как результат внедрения программного обеспечения.
Реинжиниринг бизнес-процессов, как результат внедрения программного обеспечения.
 
Евгений Ильин. Drupal + Solr: Яндекс.Маркет своими руками
Евгений Ильин. Drupal + Solr: Яндекс.Маркет своими рукамиЕвгений Ильин. Drupal + Solr: Яндекс.Маркет своими руками
Евгений Ильин. Drupal + Solr: Яндекс.Маркет своими руками
 
Lucene in odnoklassniki.ru
Lucene in odnoklassniki.ruLucene in odnoklassniki.ru
Lucene in odnoklassniki.ru
 
Поиск на своем сайте, обзор open source решений
Поиск на своем сайте, обзор open source решенийПоиск на своем сайте, обзор open source решений
Поиск на своем сайте, обзор open source решений
 
Индексируй неиндексирумое
Индексируй неиндексирумоеИндексируй неиндексирумое
Индексируй неиндексирумое
 
Производительность параметрического поиска на основе опенсорс-платформы
Производительность параметрического поиска на основе опенсорс-платформыПроизводительность параметрического поиска на основе опенсорс-платформы
Производительность параметрического поиска на основе опенсорс-платформы
 
Индексируй неиндексирумое
Индексируй неиндексирумоеИндексируй неиндексирумое
Индексируй неиндексирумое
 
Строим плот - Как не утонуть в данных
Строим плот - Как не утонуть в данныхСтроим плот - Как не утонуть в данных
Строим плот - Как не утонуть в данных
 
Движение по хрупкому дну / Сергей Караткевич (servers.ru)
Движение по хрупкому дну / Сергей Караткевич (servers.ru)Движение по хрупкому дну / Сергей Караткевич (servers.ru)
Движение по хрупкому дну / Сергей Караткевич (servers.ru)
 
Антон Терехов "Промышленные e-commerce платформы. Опыт поиска."
Антон Терехов "Промышленные e-commerce платформы. Опыт поиска."Антон Терехов "Промышленные e-commerce платформы. Опыт поиска."
Антон Терехов "Промышленные e-commerce платформы. Опыт поиска."
 

Similar to Выбираем поисковик умом головы, Андрей Аксенов (Sphinx)

Как устроен поиск (Андрей Аксёнов)
Как устроен поиск (Андрей Аксёнов)Как устроен поиск (Андрей Аксёнов)
Как устроен поиск (Андрей Аксёнов)Ontico
 
эффективный полнотекстовый поиск по базам данных петр зайцев
эффективный полнотекстовый поиск по базам данных   петр зайцевэффективный полнотекстовый поиск по базам данных   петр зайцев
эффективный полнотекстовый поиск по базам данных петр зайцевMedia Gorod
 
Про качественный поиск
Про качественный поискПро качественный поиск
Про качественный поискAndrew Aksyonoff
 
Про качественный поиск (Андрей Аксенов)
Про качественный поиск (Андрей Аксенов)Про качественный поиск (Андрей Аксенов)
Про качественный поиск (Андрей Аксенов)Ontico
 
разработка бизнес приложений (6)
разработка бизнес приложений (6)разработка бизнес приложений (6)
разработка бизнес приложений (6)Alexander Gornik
 
Devconf-2014: Ноотропы для BigData
Devconf-2014: Ноотропы для BigDataDevconf-2014: Ноотропы для BigData
Devconf-2014: Ноотропы для BigDataLeonid Yuriev
 
Крадущийся сервер, затаившийся диод (Андрей Аксенов)
Крадущийся сервер, затаившийся диод (Андрей Аксенов)Крадущийся сервер, затаившийся диод (Андрей Аксенов)
Крадущийся сервер, затаившийся диод (Андрей Аксенов)Ontico
 
Крадущийся сервер, затаившийся диод
Крадущийся сервер, затаившийся диодКрадущийся сервер, затаившийся диод
Крадущийся сервер, затаившийся диодAndrew Aksyonoff
 
Устройство современного распределенного Object Storage на примере LeoFS, Алек...
Устройство современного распределенного Object Storage на примере LeoFS, Алек...Устройство современного распределенного Object Storage на примере LeoFS, Алек...
Устройство современного распределенного Object Storage на примере LeoFS, Алек...Ontico
 
My talk on LeoFS, Highload++ 2014
My talk on LeoFS, Highload++ 2014My talk on LeoFS, Highload++ 2014
My talk on LeoFS, Highload++ 2014Alex Chistyakov
 
разработка бизнес приложений (7)
разработка бизнес приложений (7)разработка бизнес приложений (7)
разработка бизнес приложений (7)Alexander Gornik
 
SphinxSearch Meetup - Tips&tricks
SphinxSearch Meetup - Tips&tricksSphinxSearch Meetup - Tips&tricks
SphinxSearch Meetup - Tips&tricksRoman Pavlushko
 
Бинарные (файловые) хранилища: страшная сказка с мрачным концом / Даниил Подо...
Бинарные (файловые) хранилища: страшная сказка с мрачным концом / Даниил Подо...Бинарные (файловые) хранилища: страшная сказка с мрачным концом / Даниил Подо...
Бинарные (файловые) хранилища: страшная сказка с мрачным концом / Даниил Подо...Ontico
 
А. Аксенов "Как мы разрабатываем Сфинкс", DUMP-2014
А. Аксенов "Как мы разрабатываем Сфинкс", DUMP-2014А. Аксенов "Как мы разрабатываем Сфинкс", DUMP-2014
А. Аксенов "Как мы разрабатываем Сфинкс", DUMP-2014it-people
 
CodeFest 2012. Аксёнов А. — Как мы разрабатываем Sphinx
CodeFest 2012. Аксёнов А. — Как мы разрабатываем SphinxCodeFest 2012. Аксёнов А. — Как мы разрабатываем Sphinx
CodeFest 2012. Аксёнов А. — Как мы разрабатываем SphinxCodeFest
 
CV2011 Lecture 10. Image retrieval
CV2011 Lecture 10.  Image retrievalCV2011 Lecture 10.  Image retrieval
CV2011 Lecture 10. Image retrievalAnton Konushin
 
Машинное обучение в электронной коммерции - практика использования и подводны...
Машинное обучение в электронной коммерции - практика использования и подводны...Машинное обучение в электронной коммерции - практика использования и подводны...
Машинное обучение в электронной коммерции - практика использования и подводны...Ontico
 
Tofu и его окружение
Tofu и его окружениеTofu и его окружение
Tofu и его окружениеKirill Shelopugin
 
РИТ-2014: Ноотропы RDF для BigData
РИТ-2014: Ноотропы RDF для BigDataРИТ-2014: Ноотропы RDF для BigData
РИТ-2014: Ноотропы RDF для BigDataLeonid Yuriev
 
Sphinx в реальных проектах: шишки и плюшки
Sphinx в реальных проектах: шишки и плюшкиSphinx в реальных проектах: шишки и плюшки
Sphinx в реальных проектах: шишки и плюшкиphpdevby
 

Similar to Выбираем поисковик умом головы, Андрей Аксенов (Sphinx) (20)

Как устроен поиск (Андрей Аксёнов)
Как устроен поиск (Андрей Аксёнов)Как устроен поиск (Андрей Аксёнов)
Как устроен поиск (Андрей Аксёнов)
 
эффективный полнотекстовый поиск по базам данных петр зайцев
эффективный полнотекстовый поиск по базам данных   петр зайцевэффективный полнотекстовый поиск по базам данных   петр зайцев
эффективный полнотекстовый поиск по базам данных петр зайцев
 
Про качественный поиск
Про качественный поискПро качественный поиск
Про качественный поиск
 
Про качественный поиск (Андрей Аксенов)
Про качественный поиск (Андрей Аксенов)Про качественный поиск (Андрей Аксенов)
Про качественный поиск (Андрей Аксенов)
 
разработка бизнес приложений (6)
разработка бизнес приложений (6)разработка бизнес приложений (6)
разработка бизнес приложений (6)
 
Devconf-2014: Ноотропы для BigData
Devconf-2014: Ноотропы для BigDataDevconf-2014: Ноотропы для BigData
Devconf-2014: Ноотропы для BigData
 
Крадущийся сервер, затаившийся диод (Андрей Аксенов)
Крадущийся сервер, затаившийся диод (Андрей Аксенов)Крадущийся сервер, затаившийся диод (Андрей Аксенов)
Крадущийся сервер, затаившийся диод (Андрей Аксенов)
 
Крадущийся сервер, затаившийся диод
Крадущийся сервер, затаившийся диодКрадущийся сервер, затаившийся диод
Крадущийся сервер, затаившийся диод
 
Устройство современного распределенного Object Storage на примере LeoFS, Алек...
Устройство современного распределенного Object Storage на примере LeoFS, Алек...Устройство современного распределенного Object Storage на примере LeoFS, Алек...
Устройство современного распределенного Object Storage на примере LeoFS, Алек...
 
My talk on LeoFS, Highload++ 2014
My talk on LeoFS, Highload++ 2014My talk on LeoFS, Highload++ 2014
My talk on LeoFS, Highload++ 2014
 
разработка бизнес приложений (7)
разработка бизнес приложений (7)разработка бизнес приложений (7)
разработка бизнес приложений (7)
 
SphinxSearch Meetup - Tips&tricks
SphinxSearch Meetup - Tips&tricksSphinxSearch Meetup - Tips&tricks
SphinxSearch Meetup - Tips&tricks
 
Бинарные (файловые) хранилища: страшная сказка с мрачным концом / Даниил Подо...
Бинарные (файловые) хранилища: страшная сказка с мрачным концом / Даниил Подо...Бинарные (файловые) хранилища: страшная сказка с мрачным концом / Даниил Подо...
Бинарные (файловые) хранилища: страшная сказка с мрачным концом / Даниил Подо...
 
А. Аксенов "Как мы разрабатываем Сфинкс", DUMP-2014
А. Аксенов "Как мы разрабатываем Сфинкс", DUMP-2014А. Аксенов "Как мы разрабатываем Сфинкс", DUMP-2014
А. Аксенов "Как мы разрабатываем Сфинкс", DUMP-2014
 
CodeFest 2012. Аксёнов А. — Как мы разрабатываем Sphinx
CodeFest 2012. Аксёнов А. — Как мы разрабатываем SphinxCodeFest 2012. Аксёнов А. — Как мы разрабатываем Sphinx
CodeFest 2012. Аксёнов А. — Как мы разрабатываем Sphinx
 
CV2011 Lecture 10. Image retrieval
CV2011 Lecture 10.  Image retrievalCV2011 Lecture 10.  Image retrieval
CV2011 Lecture 10. Image retrieval
 
Машинное обучение в электронной коммерции - практика использования и подводны...
Машинное обучение в электронной коммерции - практика использования и подводны...Машинное обучение в электронной коммерции - практика использования и подводны...
Машинное обучение в электронной коммерции - практика использования и подводны...
 
Tofu и его окружение
Tofu и его окружениеTofu и его окружение
Tofu и его окружение
 
РИТ-2014: Ноотропы RDF для BigData
РИТ-2014: Ноотропы RDF для BigDataРИТ-2014: Ноотропы RDF для BigData
РИТ-2014: Ноотропы RDF для BigData
 
Sphinx в реальных проектах: шишки и плюшки
Sphinx в реальных проектах: шишки и плюшкиSphinx в реальных проектах: шишки и плюшки
Sphinx в реальных проектах: шишки и плюшки
 

More from Ontico

One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...Ontico
 
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)Ontico
 
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)Ontico
 
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...Ontico
 
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...Ontico
 
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)Ontico
 
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...Ontico
 
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...Ontico
 
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)Ontico
 
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)Ontico
 
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...Ontico
 
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...Ontico
 
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...Ontico
 
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)Ontico
 
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)Ontico
 
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)Ontico
 
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)Ontico
 
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...Ontico
 
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...Ontico
 
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...Ontico
 

More from Ontico (20)

One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
 
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
 
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
 
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
 
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
 
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
 
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
 
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
 
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
 
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
 
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
 
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
 
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
 
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
 
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
 
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
 
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
 
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
 
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
 
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
 

Выбираем поисковик умом головы, Андрей Аксенов (Sphinx)

  • 1. Выбираем поиск умом головы Андрей Аксёнов, Sphinx
  • 2. Про что доклад • Надо поиск, какой взять? – Дык в MySQL/Postgres/Mongo чота типа есть и агонь – Взять Sphinx, C++ не подведёт – Взять Lucene/Solr/Elastic, Java не подведёт – Самим всё написать, мы ж мужики – Купить крутейший коммерческий, например
  • 3. Про что доклад • Надо поиск, какой взять? • Чем и как MySQL vs Postgres vs Mongo vs Sphinx vs Lucene vs … оно всё внутри вообще отличается? • Как правильно бенчмаркать? • Что ещё нужно сравнивать?
  • 4. Про что доклад • Надо поиск, какой взять? – Разумеется, Sphinx! – Разумеется, с контрактом на поддержку! – Разумеется, чем больше нулей, тем лучше! – Всё, доклад окончен, расходимся
  • 5. Варианты – в порядке усложнения
  • 6. Самописный поиск за 1 час • create table X ( keyword varchar(255) not null, docid integer primary key not null ); • insert into X values (“hello”, 123), (“world”, 123); • select * from X a, X b where a.keyword=“hello” and b.keyword=“world” and a.docid=b.docid
  • 7. Самописный поиск за 1 вечер • Можно даже успеть вкрутить еще всякое! – Стеммер, libstemmer и его порты – Морфология, pyrmophy2, phpmorphy (aot нельзя) – Ранжирование, BM25 • alter table X add column termfreq integer • create table D (keyword varchar(255), docfreq integer) • select …
  • 8. Встроенный в базу поиск • Согласно вендору базы, Дичайше Круче Всех • На самом деле, Неизбежно Выйдет Говнецо (*) – Все базы в первую очередь про OLAP, ох – Великие Древние ещё также умеют транзакции, ууух – Типично муторно масштабировать – Синтаксис, ранжирование, эффективность? Не, не слышали (*) Разумеется, именно Ваш Любимый Вендор не такой!
  • 9. Самописный поиск за 10 лет • Можно успеть вкрутить ещё всякое!!! – Внятный формат индекса – Поддержка атрибутивки – Синтаксис запросов – Ранжирование – Кластеризация • Каждый пункт = N переделок, M лет
  • 10. Внешний поиск • FOSS (free, open source) – Sphinx – Lucene + сервера поверх (Solr, Elastic) • Коммерческие – FAST, Endeca, Autonomy, Verity… куча вендоров – Отдельный мир, обязательно Sharepoint и 4-5 нулей – Интеграция, поддержка, функционал часто хтонические
  • 11. Так своё писать или как!? • Как ни странно, иногда надо – Core product (Google, Yandex, Bing…) – Спецтребования (“хочу взлетать в 16 KB памяти…”) • Ключевое, осознавать масштаб бедствия – У нас вот получается довольно компактно – Sphinx 0.1 = ~1K LOC, Sphinx 2.x = ~120K LOC – Больше фичей и-или “сопливый” код = ~1..10M+ LOC
  • 12. Так своё писать или как!? • 99%, что вам – не надо – Мало усилий => так себе и получится – Много усилий => это зачем? • Берите базу, берите Sphinx, берите Lucene & spawn • Бегите от “заказчиков”, у которых нету $10 на VPS!!!
  • 14. А чем НеСвои отличаются-то? • Ууу… • Отличаются метод доставки данных; форматы индекса; скорость индексации; размеры индекса; требования к RAM; механизмы масштабирования; API доступа; функционал текстового поиска; скорость текстового поиска, причем от вида запроса; скорость НЕтекстового поиска; добавочные функции (геопоиск, фасеты, подсказки, сниппеты); ранжирование; расширяемость…
  • 19. Что сравнивать? • Сравнивать надо фактически важное – Не умеют не только лишь все – Мало кто может это делать • У каждого свои требования, они ортогональны – Качество поиска VS супербыстрый булев поиск? – Текстовый поиск VS атрибутивка? – Масштабирование на терабайты VS индекс на 1 GB?
  • 20. Про отличия чуть подробнее • Совсем подробно нельзя – уйдет 3 дня • Поэтому – очень кратко, по верхам • 3 категории = (1) базы, (2) FOSS, (3) commercial • 4 мегаоси = (1) эффективность, (2) функционал, (3) масштабируемость, (4) интеграция
  • 21. Performance Functions Scaling Integration DBMS 1..2 1..2 1..3 5+ FOSS (Sphinx, Lucene) 3..5 4..5 3..5 3..4 Commercial 1..5 1..5 1..5 3..4 DIY 1d..1m 1* 1* 1* 1*
  • 22. Правильно читаем таблицу • Типичная база = хреновенькие скорость, функционал, масштабируемость… зато отличная интеграция! • Типичный FOSS = хорошо или отлично С/Ф/М; интеграция окей (но очевидно хуже встроенного) • Commercial = возможны адовые попадосы по любому параметру за свои же деньги, в целом не впечатляет • DIY = в общем будет очень плохо; но в частностях, возможно, невероятно хорошо
  • 24. Sphinx vs Lucene • Поговорим немного про “а что внутри” • Какие сходства, откуда растут отличия • Sphinx = сервер, C++ (библиотека “как бы” есть) • Lucene = библиотека, Java • Solr = сервер, Java • Elastic = сервер, Java
  • 25. Sphinx 2.x vs 3.x • Долго делаем, всякому научились • Теперь переделываем внутри много всего • Некоторые переделки Поменяют Всё, поэтому!
  • 26. Sphinx vs Lucene • Что одинаковое? – Идеология “инвертированный файл” – Всё начинается от текстового поиска – Отдельно довески про атрибутивку • Что это значит? – “Тупо поиск” работает принципально одинаково – Детали реализации, однако, могут менять всё
  • 27. Sphinx vs Lucene • Что разное внутри? – Формат хранения ключевиков, постингов – Формат хранения атрибутов – “Привычки” внутреннего кеширования – “Фокус” матчилки • Что это значит?
  • 28. Про формат постингов • Sphinx 2.x = общие словари, списки по всем полям • Lucene = отдельные по каждому полю – Матчинг в “редком” поле = Lucene “О-быстрее” – Матчинг по куче полей = Lucene “О-медленнее” – Матчинг со взвешиванием = Lucene “О-медленнее” – Нумерация полей = Sphinx 2.x ограничен 256 полями, индекс “О-больше” по размеру – Куча полей, куча уникальных “слов” = плохо везде (словарь)
  • 29. Про формат атрибутов • Sphinx 2.x = in-memory, row-based attr-only table • Lucene = on-disk, row-based docstore + кеш кеш кеш – Доступ в Sphinx = in-memory hash lookup – Доступ в Lucene = как бы disk read, поэтому кеш кеш кеш – Sphinx = можно смешать schemaful/schemaless – Lucene = полный schemaless, поэтому кеш кеш кеш  – Зато у нас в 2.x дурацкие исторические ограничения 
  • 30. Про формат документов • Lucene = хранилка документов есть • Sphinx 2.x = хранилки документов нет • Sphinx 3.x = хранилка документов тоже есть – Тоже перерастаем в странную СУБД – Тоже disk based, тоже LZ4 – Принципиально улучшить не удалось
  • 31. Про кеширование • Sphinx = запрос надо уметь считать адово быстро • Lucene = скорость вторична, всё закешируем! – Sphinx = внутренних кешей почитай нет  – Lucene = кешируется ВСЁ, местами хрен отключишь – Делать адекватные бенчмарки это местами АД • Xapian (внезапно) = оптимизация под дефолтный, непрактичный юзкейс
  • 32. Про “фокус” матчилки • Sphinx 2.x = позиции! ранжирование! релевантность! фиксированный бюджет памяти! • Lucene = не-не-не, булев матчинг и может BM25; памяти побольше тупо ставь – Sphinx 2.x = неидеально c булевым поиском – Sphinx 3.x = думаем про отдельный lightweight code path… и убрать бюджетирование, муахахаха – Lucene = неидеально с ранжированием/позициями
  • 33. Итого • Концептуально одинаково (инвертированный файл) • Довольно разные реализации • “Детали реализации” меняют всё, в разы
  • 35. Что на этаж выше? • Sphinx vs Solr/Elastic, что одинаковое? – Везде некий API (SphinxQL, REST/XML, REST/JSON) – Везде завелись RT индексы – Везде развелся schemaless/JSON (в разной мере) – Везде как минимум агрегация результатов с кластера – Везде поддержка атрибутивки, ряда допфункций – Везде, что странно, “просто поиск” как-то работает!!! – Коммодитизация…
  • 36. Что на этаж выше? • Sphinx vs Solr/Elastic, что разное? – S/E, репликация, автошардинг, REST, “реверсные” поиски, менеджмент кластера (почти всё тоже делаем для 3.0) – Sphinx, встроенная морфология, “сложное” ранжирование, считалка выражений • Всегда разный “эзотерический” (?) функционал – Sphinx, плохо помню! Zones, blend_chars, итп? – S/E, плохо знаю! Per-field mappings, nested docs итп?
  • 38. Идеала нет!!! • Мне не нравится, как устроен Sphinx 2.x • Мне не нравится, как устроен Lucene • И в Sphinx 3.0 мне тоже пока не всё нравится!!!
  • 40.
  • 42.
  • 43. Как “правильно” бенчмаркать • На оценку 3 = берем разные системы, делаем к ним одинаковый запрос, сравниваем время • На оценку 4 = повторяем запрос N раз, считаем среднее время, чтобы кеш прогрело и не дрожало • На оценку 5 = выкидываем 1й прогон всегда и даже выкидываем outliers, считаем среднее без них
  • 44.
  • 45. Тёплое != мягкое • Где ошибка? • “берем разные системы, делаем к ним одинаковый запрос”… • Одинаковый запрос • ОДИНАКОВЫЙ ЗАПРОС
  • 46. Marketing-driven defaults 1 • “Одинаковый запрос” по умолчанию очень разный • Sphinx, поиск по умолчанию = strict-AND, “среднее” proximity+bm15 ранжирование, анализ позиций • Lucene, поиск по умолчанию = OR (вроде), “легкое” bm25 ранжирование, почти булев поиск • Xapian (внезапно!) = top-N по ихнему bm25!!! • …и это еще цветочки!!!
  • 47. Marketing-driven defaults 2 • Повторные запросы? • Sphinx = честно вычисляем всё заново, кешируется только дисковое чтение, да и то на уровне OS • Lucene = на всех уровнях есть внутренние кеши, некоторые невозможно отключить никак – Нужна долбежка многими разными запросами – Повтор 1 запроса подряд = обмеряем отдачу из кеша – Повтор пакета из 10-20 запросов = в общем-то тоже
  • 48. Marketing-driven defaults 3 • Сниппеты, прям шедевр! • “А чё у вас в N раз медленнее, чем Solr?” – Поддержка синтаксиса VS bag-of-words – Произвольный текст VS только преиндексированный – И ключевая “оптимизация” Solr... – Зачем подсвечивать всё, если можно первые 64 KB?!
  • 49. Мы на горе всем буржуям • Поломаем совместимость!!! • Но исправим дефолты 
  • 51. Так как выбирать-то?!!! Все кандидаты... …хороши!
  • 52. Идеальная Ситуация • Определяем реальные ключевые требования • Слегка изучаем все сравниваемые системы (увы!) • Делаем действительно сходные запросы • Моделируем боевую нагрузку, помним про кеши • Смотрим функционал (что реально критично?) • Прикидываем TCO
  • 53. Помним Общие Моменты • База = забудь про функционал и скорость, но удобно • Sphinx, Lucene et al = ср. быстро и функционально; по разным виды запросов могут сильно отличаться – Несколько разный функционал и, похоже, “фокус” – Сравнивать и мерить нужное, иначе (уже+пока) никак • Коммерческие = неожиданные подвохи, TCO • Дефолтные настройки могут удивить
  • 54. Делаем Правильный Выбор • Выбираем систему X, т.к. – Друг Вася пользуется! – Знакомый Петя хвалил! – На Хабре чота писали вроде крутое! – В компанию пришел интерн с опытом! (делал homepage) • Выбираем систему Y, т.к. – Она дорогая от известного мега-производителя – И деньги очень нужны имеет убедительные плюсы