Sphinx 3.0
поиск 15 лет спустя
Андрей Аксенов
Sphinx
sphinx == привет, эпоха динозавров
• Малоизвестный сервер про поиск
• Началось в 2001, публичность в 2006, сегодня 2016
• Очередная переделка, очередная мажорная версия
• А о чем доклад-то?
• Расскажу, чего делаем – революций нет, “нудная”работа
• Покажу, что есть место подвигу – несмотря на 15 лет итп
обязательный слайд rev.2016
• А почему не elasticsearch?
обязательный слайд
• А почему не htdig? 1995
• А почему не udmsearch? 1998
• А почему не lucene? 1999
• А почему не google search appliance? 2002
• А почему не solr? 2004
• А почему не elasticsearch? 2009
• А почему не poiskifier? 2017
• Сегодня в Гугле 0 (ноль) хитов, посмотрим завтра
обязательный слайд rev.2016
• А почему не elasticsearch? А почему бы нет???
• Потому что могу, пока не умер и не сменил индустрию 
черная сморщенная изюминка
• Не верю в бесконечные горы кода
• Не верю в топовый перф без ассемблера
• Не верю в одну идеальную мегатехнологию
• Не верю в ничьи сверхспособности (в свои особенно)
• => Поэтому какие-то технические причины будут всегда
• Короче, строим вечную альтернативную реальность!!! 
• Могло быть хуже, мог бы быть OpenBSD
хватит ныть, покежь код
• http://github.com/sphinxsearch/
• И все еще письмо на shodan@sphinxsearch.com
• Сырая публичная альфа 1.x – пробовал, плохо
• Длинный секретный рефактор 3.x – пробую, плохо
• Новая переделка каждый, скажем, месяц – ??? 
нас опять обманули, расходимся
• Для всех остальных, наконец, и про технологии, но…
• Ошибка молодости #1, неуверенность в себе
• Ранее == эта, мы добавка к основному хранилищу
• Теперь == не, всё, мы мегабаза (кривая, ну как и все)
• Ошибка молодости #2, проспали облака
• Ошибка молодости #3, оттягивание переделок
• Ошибка молодости #4, небезразличен перф
ошибки надо исправлять
• #1 мегабаза == docstore, vrows, json, btree…
• #2 облака == репликация (первый шаг) и далее (ууу)
• #3 затягивание == меньше кода, проще убивать
• #4 функционал/перф == новый формат индекса
• даст новый функционал – это хорошо
• даст еще и перф – это очень, очень плохо
• “куда я полез, я ж и читать не умею” – привычки 
быстро не вышло, вышло как всегда
• #1 мегабаза == docstore, vrows, json, btree…
• #2 облака == репликация (первый шаг) и далее (ууу)
• #3 затягивание == меньше кода, проще убивать
• #4 функционал/перф == новый формат индекса
• даст новый функционал – это хорошо
• даст еще и перф – это очень, очень плохо
• плюс скрипты, плюс json компрессия, итд итп
подробнее про docstore
• Умеем хранить тело документа (ага, догнали Solr)
• Умеем хранить мини-индекс для сниппетов
• Память не жрёт, диск жрёт, LZ4 умеет
• Текст хранится ок, блобы не пробовали
• Сниппеты ускорились чисто ошпаренные
• Бенчмарков не будет, добровольцы не писали
• Место подвига == внезапно, мини-индекс (плюс LZxx)
подробнее про vrows
• Умеем компактнее хранить атрибуты (1 вместо N ptr)
• Закопали дебильные 4G/16G лимиты начала 2000х
• Стал технически возможен NULL (делать пока не стали)
• Место подвига == не случилось, но
• Занятные эксперименты про SSE2/3/4 vs lens/offsets
• Row level locks? (неохота, страшно!!)
• Efficient mmapping/caching?
подробнее про json
• Умеем ловко жать ключи, честно считать всякое
• Место для подвига ==
• Оказывается, парсеры говнецо (наш тоже)
• Оказывается, честная структура непросто
• Оказывается, компрессия ключей рулит
• Оказывается, спецслучаи типа int[] рулят
подробнее про btree
• Умеем индексы по атрибутам, закапываем __fakeKeyword
• Умеем вчерне индексы по json колонкам даже
• Место для подвига ==
• Оказывается, рукой можно лучше, чем Гугл (оп-паньки)
• Оказывается, вариантов деревьев того, МНОГО
• И осталась куча нетронутого фана про планировщик,
про помериться с LSM и хешами, про index merge, …
подробнее про репликацию
• Умеем вести, играть, пересылать лог действий (binlog)
• Умеем пересылать куски индекса
• Умеем 1:1, 1:N “полуручную” репликацию
• Не умеем “hive mind” кластер, хотим
• Бомбит, понятно, хоть перевыборы мастера бы
• Место для подвига == почитай бесконечное, см. Jepsen
подробнее про формат индекса
• Умеем индексировать и искать (вот это ачивка!!!)
• Умеем в памяти, остался рывок “на диске”
• Внесли простор для extensions
• Место для подвига == сплошной low level (bit farsh бгг)
• внезапно, изобрели тупой, но очень годный кодек
• внезапно, _mm_crc32_u32 лучший хеш эвар
• внезапно, int fastrstr[] и гонки с memcmp итп
• и еще куча мелочей, большую часть забыл
когда релиз, когда смерть эластика?!
• Релиз планировал на вчера (2 мес назад), опять не смог
• Получается, надо либо завтра, либо никогда
• Голосуем!!!
• Эластик умрет сам, мы умрем независимо
• Сроки полураспада долгие, 5-10 лет и более
• И ваще, от меня не зависит никак
dafuq did i just watch???
• Вот знайте, Sphinx там всё пилит версию 3.0 какую-то
• Да, мееедленно и по-эстооонски, да, уже не смешно
• Вот знайте, уже готов ряд всяких небезынтересных штук
• И щаз парни из Авито расскажут, как это все глючит!!!
• Вот знайте, на фронтире до сих пор есть место подвигу
• Нишевым, но спецфокусам, типа-изобретениям итп
и про 15 лет, раз обещали
• Давно же тут сижу – как поменялся ландшафт?
• Адский прогресс везде – языки, VM, алгоритмы, железо
• Уровень входа изрядно подрос – поиск уже тоже база
• Считаю это первым ключевым – кругом какие-то базы
• Считаю вторым ключевым – внезапные логи/аналитику
• Но это не значит, что завтра poiskifier не убьёт всех!!!
• И это не значит, что в нише всё сделано, см. подвиг
вопросы?
shodan@sphinxsearch.com
skype:shodanium

Sphinx 3.0, поиск 15 лет спустя / Андрей Аксенов (Sphinx)

  • 1.
    Sphinx 3.0 поиск 15лет спустя Андрей Аксенов Sphinx
  • 2.
    sphinx == привет,эпоха динозавров • Малоизвестный сервер про поиск • Началось в 2001, публичность в 2006, сегодня 2016 • Очередная переделка, очередная мажорная версия • А о чем доклад-то? • Расскажу, чего делаем – революций нет, “нудная”работа • Покажу, что есть место подвигу – несмотря на 15 лет итп
  • 3.
    обязательный слайд rev.2016 •А почему не elasticsearch?
  • 4.
    обязательный слайд • Апочему не htdig? 1995 • А почему не udmsearch? 1998 • А почему не lucene? 1999 • А почему не google search appliance? 2002 • А почему не solr? 2004 • А почему не elasticsearch? 2009 • А почему не poiskifier? 2017 • Сегодня в Гугле 0 (ноль) хитов, посмотрим завтра
  • 5.
    обязательный слайд rev.2016 •А почему не elasticsearch? А почему бы нет??? • Потому что могу, пока не умер и не сменил индустрию 
  • 6.
    черная сморщенная изюминка •Не верю в бесконечные горы кода • Не верю в топовый перф без ассемблера • Не верю в одну идеальную мегатехнологию • Не верю в ничьи сверхспособности (в свои особенно) • => Поэтому какие-то технические причины будут всегда • Короче, строим вечную альтернативную реальность!!!  • Могло быть хуже, мог бы быть OpenBSD
  • 7.
    хватит ныть, покежькод • http://github.com/sphinxsearch/ • И все еще письмо на shodan@sphinxsearch.com • Сырая публичная альфа 1.x – пробовал, плохо • Длинный секретный рефактор 3.x – пробую, плохо • Новая переделка каждый, скажем, месяц – ??? 
  • 8.
    нас опять обманули,расходимся • Для всех остальных, наконец, и про технологии, но… • Ошибка молодости #1, неуверенность в себе • Ранее == эта, мы добавка к основному хранилищу • Теперь == не, всё, мы мегабаза (кривая, ну как и все) • Ошибка молодости #2, проспали облака • Ошибка молодости #3, оттягивание переделок • Ошибка молодости #4, небезразличен перф
  • 9.
    ошибки надо исправлять •#1 мегабаза == docstore, vrows, json, btree… • #2 облака == репликация (первый шаг) и далее (ууу) • #3 затягивание == меньше кода, проще убивать • #4 функционал/перф == новый формат индекса • даст новый функционал – это хорошо • даст еще и перф – это очень, очень плохо • “куда я полез, я ж и читать не умею” – привычки 
  • 10.
    быстро не вышло,вышло как всегда • #1 мегабаза == docstore, vrows, json, btree… • #2 облака == репликация (первый шаг) и далее (ууу) • #3 затягивание == меньше кода, проще убивать • #4 функционал/перф == новый формат индекса • даст новый функционал – это хорошо • даст еще и перф – это очень, очень плохо • плюс скрипты, плюс json компрессия, итд итп
  • 11.
    подробнее про docstore •Умеем хранить тело документа (ага, догнали Solr) • Умеем хранить мини-индекс для сниппетов • Память не жрёт, диск жрёт, LZ4 умеет • Текст хранится ок, блобы не пробовали • Сниппеты ускорились чисто ошпаренные • Бенчмарков не будет, добровольцы не писали • Место подвига == внезапно, мини-индекс (плюс LZxx)
  • 12.
    подробнее про vrows •Умеем компактнее хранить атрибуты (1 вместо N ptr) • Закопали дебильные 4G/16G лимиты начала 2000х • Стал технически возможен NULL (делать пока не стали) • Место подвига == не случилось, но • Занятные эксперименты про SSE2/3/4 vs lens/offsets • Row level locks? (неохота, страшно!!) • Efficient mmapping/caching?
  • 13.
    подробнее про json •Умеем ловко жать ключи, честно считать всякое • Место для подвига == • Оказывается, парсеры говнецо (наш тоже) • Оказывается, честная структура непросто • Оказывается, компрессия ключей рулит • Оказывается, спецслучаи типа int[] рулят
  • 14.
    подробнее про btree •Умеем индексы по атрибутам, закапываем __fakeKeyword • Умеем вчерне индексы по json колонкам даже • Место для подвига == • Оказывается, рукой можно лучше, чем Гугл (оп-паньки) • Оказывается, вариантов деревьев того, МНОГО • И осталась куча нетронутого фана про планировщик, про помериться с LSM и хешами, про index merge, …
  • 15.
    подробнее про репликацию •Умеем вести, играть, пересылать лог действий (binlog) • Умеем пересылать куски индекса • Умеем 1:1, 1:N “полуручную” репликацию • Не умеем “hive mind” кластер, хотим • Бомбит, понятно, хоть перевыборы мастера бы • Место для подвига == почитай бесконечное, см. Jepsen
  • 16.
    подробнее про форматиндекса • Умеем индексировать и искать (вот это ачивка!!!) • Умеем в памяти, остался рывок “на диске” • Внесли простор для extensions • Место для подвига == сплошной low level (bit farsh бгг) • внезапно, изобрели тупой, но очень годный кодек • внезапно, _mm_crc32_u32 лучший хеш эвар • внезапно, int fastrstr[] и гонки с memcmp итп • и еще куча мелочей, большую часть забыл
  • 17.
    когда релиз, когдасмерть эластика?! • Релиз планировал на вчера (2 мес назад), опять не смог • Получается, надо либо завтра, либо никогда • Голосуем!!! • Эластик умрет сам, мы умрем независимо • Сроки полураспада долгие, 5-10 лет и более • И ваще, от меня не зависит никак
  • 18.
    dafuq did ijust watch??? • Вот знайте, Sphinx там всё пилит версию 3.0 какую-то • Да, мееедленно и по-эстооонски, да, уже не смешно • Вот знайте, уже готов ряд всяких небезынтересных штук • И щаз парни из Авито расскажут, как это все глючит!!! • Вот знайте, на фронтире до сих пор есть место подвигу • Нишевым, но спецфокусам, типа-изобретениям итп
  • 19.
    и про 15лет, раз обещали • Давно же тут сижу – как поменялся ландшафт? • Адский прогресс везде – языки, VM, алгоритмы, железо • Уровень входа изрядно подрос – поиск уже тоже база • Считаю это первым ключевым – кругом какие-то базы • Считаю вторым ключевым – внезапные логи/аналитику • Но это не значит, что завтра poiskifier не убьёт всех!!! • И это не значит, что в нише всё сделано, см. подвиг
  • 20.