За 15 лет разработки концепция немного поменялась и, начиная со Sphinx 3.0, мы теперь, если задуматься, вполне себе самостоятельная распределенная база (с фокусом на полнотекстовый поиск), а не только лишь добавочный к основному хранилищу поисковый движок.
Порядка 2 лет уже пилим ряд больших внутренних переделок под флагом 3.0 и, вот, наконец-то, доделываем. (На момент подачи тезисов "наполовину" готов новый клевый формат индекса; к моменту проведения конференции рассчитываем выложить публично доступную альфу).
Уже приделано всякое интересное:
* новый формат индекса, компактный и быстрый (в разы быстрее индексация и поиск);
* дисковое хранилище для документов и всяких спец. данных;
* полноценные B-tree индексы по атрибутам;
* репликация индексов.
Сделаю краткий обзор внутренней реализации этого всего, расскажу, как мы переложили битики и байтики, и что и почему это дало функционально.
Бенчмарков "а почему не Elastic" сделать не успеем, для этого нужны добровольцы. Добровольцы, подайте 1 громкий зеленый email вверх.
2. sphinx == привет, эпоха динозавров
• Малоизвестный сервер про поиск
• Началось в 2001, публичность в 2006, сегодня 2016
• Очередная переделка, очередная мажорная версия
• А о чем доклад-то?
• Расскажу, чего делаем – революций нет, “нудная”работа
• Покажу, что есть место подвигу – несмотря на 15 лет итп
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 i just watch???
• Вот знайте, Sphinx там всё пилит версию 3.0 какую-то
• Да, мееедленно и по-эстооонски, да, уже не смешно
• Вот знайте, уже готов ряд всяких небезынтересных штук
• И щаз парни из Авито расскажут, как это все глючит!!!
• Вот знайте, на фронтире до сих пор есть место подвигу
• Нишевым, но спецфокусам, типа-изобретениям итп
19. и про 15 лет, раз обещали
• Давно же тут сижу – как поменялся ландшафт?
• Адский прогресс везде – языки, VM, алгоритмы, железо
• Уровень входа изрядно подрос – поиск уже тоже база
• Считаю это первым ключевым – кругом какие-то базы
• Считаю вторым ключевым – внезапные логи/аналитику
• Но это не значит, что завтра poiskifier не убьёт всех!!!
• И это не значит, что в нише всё сделано, см. подвиг