Скачать презентацию
Идет загрузка презентации. Пожалуйста, подождите
Презентация была опубликована 10 лет назад пользователемСемен Шиморин
1 Sphinx 2009 Андрей Аксенов
2 EHLO sphinxsearch.com Да, это опять я Да, очередной доклад про Sphinx
3 EHLO sphinxsearch.com Все еще бесплатная, все еще открытая поисковая система Систему делаем давно, доклады тоже Сегодня расскажу про достижения за 2009й год (всякие технические)
4 РАЗ
6 как мы в целом?
7 svn log > log.txt r1 | (no author) | … (Wed, 19 nov 2003) | 1 line – New repository initialized by cvs2svn. r1631 | shodan | … (Mon, 05 Jan 2009) | 3 lines – unescape query contents r2011 | shodan | … (Thu, 01 Oct 2009) | 4 lines – added FlushAttrs() command and API call, updated PHP/Python/Java APIs – added --logdebug option to searchd
8 Выпустили rc2 Пока не осилили выпустить release – Хотел в сентябре, теперь хочу в октябре Делаем всякие новые фичи в dev Делаем RT ветку (будет 1.x) – Альфы тоже хочу в октябре, но… Наконец сделали публичный SVN репо – Поэтому если не успею, то как бы ничего!!!
9 CHANGELOG rc2-added added IsConnectError(), Open(), Close() calls to Java API (bug #240)bug #240 added read_buffer, read_unhinted directivesread_bufferread_unhinted added checks for build options returned by mysql_config (builds on Solaris now) added fixed-RAM index merge (bug #169)bug #169 added logging chained queries count in case of (optimized) multi-queries added GEODIST() functionGEODIST() added --status switch to searchd--status switch to searchd added MySpell (OpenOffice) affix file support (bug #281)bug #281 added ODBC support (both Windows and UnixODBC)ODBC support added support in IN() (bug #292)bug #292 added support for aggregate functions in GROUP BY (namely AVG, MAX, MIN, SUM)aggregate functions added MySQL UDF that builds snippets using searchdMySQL UDF that builds snippets added write_buffer directive (defaults to 1M)write_buffer added xmlpipe_fixup_utf8 directivexmlpipe_fixup_utf8 added suggestions sample added microsecond precision int64 timer (bug #282)bug #282 added listen_backlog directivelisten_backlog directive added max_xmlpipe2_field directivemax_xmlpipe2_field added initial SphinxQL support to mysql41 handler, SELECT.../SHOW WARNINGS/STATUS/META are handledinitial SphinxQL support added support for different network protocols, and mysql41 protocol added fieldmask ranker, updated SphinxSE list of rankersfieldmask ranker added mysql_ssl_xxx directivesmysql_ssl_xxx added --cpustats (requires clock_gettime()) and --status switches to searchd--cpustats (requires clock_gettime()) and --status switches added performance counters, Status() API callStatus() added overshort_step and stopword_step directivesovershort_stepstopword_step added strict order operator (aka operator before, eg. "one
10 CHANGELOG-* Список фиксов rc2 еще чуть длиннее Списка изменений в вообще пока нет Поэтому расскажу не абсолютно все! И не абсолютно подробно!
11 ДВА
12 что нового в 0.9.9
13 svn log branches/rel099 MySQL protocol + SphinxQL Фича года полугодия (первого) $ mysql -P 3307 Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 1 Server version: dev (r1734) Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql> SELECT * FROM test1 WHERE MATCH('test') -> ORDER BY group_id ASC OPTION ranker=bm25; | id | weight | group_id | date_added | | 4 | 1442 | 2 | | | 2 | 2421 | 123 | | | 1 | 2421 | 456 | | rows in set (0.00 sec)
14 MySQL listener Теперь к searchd можно подцепиться MySQL клиентом – ЛЮБЫМ – Например, программой mysql – Например, mysql_connect() из PHP/Python/Perl Реализация протокола полностью своя – Наличие mysqld сервера НЕ требуется – Как и наличие любых mysql библиотек
15 SphinxQL Подцепиться мало – еще надо запросы SphinxQL – наш личный типа-диалект SQL умеет SELECT и еще пару-тройку SHOW Зато практически весь SELECT – Любые арифметические выражения – Некоторые WHERE, ORDER BY, GROUP BY Внимание, фокус про некоторые – SELECT *, a OR b AS q WHERE q=1
16 svn log branches/rel099 Агрегатные функции (AVG, MIN, MAX, SUM) Поддержка ODBC (MS SQL, Oracle, …) Внутренние счетчики – См. ключик --cpustats – См. SHOW STATUS Оператор жесткого порядка – мама
17 svn log branches/rel099 indexer --merge наконец исполняется в фиксированной памяти (давно хотели) Добавили утилиту indextool – Начиная с – только вывод всякого – Начиная с – еще и жесткие проверки корректности индексов (indextool --check)
18 svn log branches/rel099 Добавили пример про suggestions Добавили read_buffer, write_buffer, read_unhinted Добавили еще ~20 мелких фич, см. доки – Из них 6 новых директив в конфиге – xmlpipe_fixup_utf8 + listen_backlog + max_xmlpipe2_field + mysql_ssl_xxx + overshort_step + stopword_step
19 ТРИ
20 что нового в
22 svn log trunk Была еще вторая (полу-)половина года… 180+ коммитов без единого релиза!!! – Ну, в смысле публичного – Отсылаем клиентам по мере фиксов – Отсылаем клиентам по мере изготовления фич – Выложились на Googlecode – Хотим больше и чаще, но – Ресурсов не хватает :(
23 svn log trunk Добавили новые MPM – Multi Processing Model – Уже были fork, none (неявно в --console) – Добавили prefork, threads Prefork уже используют в бою (по слухам) Threads еще не умеет ротации (будет) Оба приятно экономят system time
24 svn log trunk Добавили строковые атрибуты – sql_attr_string, sql_field_string – Хранятся строго в памяти, как MVA – Пока только тупое хранение + возврат – Пока без ORDER BY / GROUP BY (ау спонсорам) – Пока без encoding/collations (см. без ORDER BY!) – Уже можно совсем без базы, тем не менее
25 svn log trunk Добавили indextool --check – Бывают ошибки в indexer – Бывают ошибки администрирования – Бывают сбои железа – Теперь индекс можно поверить на внутреннюю корректность – Fun fact: оказывается, число вхождений слова можно посчитать 3 (тремя) разными способами (считаем и проверяем все)
26 svn log trunk Оптимизация для 1-словных запросов – Замедлили в 0.9.9, почти вернули в Оптимизация работы с атрибутами – Убрали копирования, стало быстрее Оптимизация MySQL протокола – Поправили разное, теперь сильно меньше оверхедов на клиенте (dummybench)
27 svn log trunk Оптимизация для общих подзапросов – Для некоторых особенных паттернов Оптимизация загрузки (pending review) – Убираем фазу indexing attributes – Уже сделали, еще не залили
28 svn log trunk Добавили blend_chars – Чтобы искать всякие AT&T и т.п. C++ – Чтобы НЕ указывая заранее список exceptions – Чтобы быстрее (индексируются полные слова) – Чтобы по кускам слов находилось тоже – Говорят, удобно #hashtags Добавили (partially) hitless индексы – Иногда позиции не нужны!
29 svn log trunk Добавили sql_joined_field – Если нету или нельзя GROUP_CONCAT Добавили query-based режим подсветки сниппетов – При поиске Вася Петров в кавычках сниппетаВася Иванов и Ваня Петров не будет
30 svn log trunk Добавили expand_keywords, ранкер SPH04 expand_keywords – Заменяет hello на (hello|=hello|*hello*) – Зачем на нашей стороне? Чтобы автоматически + правильные позиции слов в запросе SPH04 – Бустит полное совпадением поля (посильнее) – Бустит совпадение в начале поля (послабее) – В остальном наш обычный proximity+BM25
31 svn log trunk Добавили payloads – Формально – индексация пользовательских числовых значений вместо позиции слова – Практически – фактор взвешивания, привязанный к слову X в документе Y – Т.е. можно делать разные для разных слов – Т.е. можно дать документу MS buys Yahoo буст 100 по слову MS и 32 по слову Yahoo – В момент индексации
32 svn log trunk И еще несколько фич – searchd progressbar (read 4.0 of MB…) – searchd --logdebug – indextool --htmlstrip – max_batch_queries – dist_threads (in progress) – FlushAttrs() – кажется, это даже полный список фич (пока)
33 ЧЕТЫРЕ
34 когда уже 1.0
36 svn info Версии 1.0 не будет никогда.
37 svn info Версии 1.0 не будет никогда. Будет сразу 1.10 или 1.11 Я бы, конечно, предпочел сразу 7i
38 svn log branches/rt Паралелльно с trunk делали branches/rt Уже практически альфа (pending review) Ориентировочно ноябрь-декабрь Чего ждать и чего не ждать от альфы?
39 svn log branches/rt RT индекс живет в фиксированной памяти Когда память кончается, дампим на диск Автоматом мержим в памяти Автоматом управляем кусками Автоматом управляем kill-lists Фактически, main+delta, но все автоматом!
40 svn log branches/rt Скорость вставки – INSERT на 1 запись на 1 KB + COMMIT = ~1-2 ms –От начала до конца в ~1.5-2 раза медленнее – Понятно, чем реже COMMIT, тем быстрее – COMMIT еще НЕ durable (уже atomic/isolated) – Fun fact: VERY isolated
41 svn log branches/rt Скорость поиска – Для куска в памяти – близко к обычному – Для куска на диске – это и есть (!) обычный – Теоретически на больших индексах будет измеримо медленнее (фрагментация)
42 svn log branches/rt Интерфейс – Пока (?) строго через MySQL protocol – Есть INSERT – Есть SELECT – Есть DELETE … WHERE id=X – Будет UPDATE attr WHERE id=X – НЕ будет UPDATE field WHERE id=X – Когда-нибудь сделаем WHERE whatever
43 ВСЕ!
45 вопросы?
Еще похожие презентации в нашем архиве:
© 2024 MyShared Inc.
All rights reserved.