Эффективный полнотекстовый поиск по базам данных Андрей Аксенов, Петр Зайцев Percona Ltd. shodan (at) shodan.ru.

Презентация:



Advertisements
Похожие презентации
Поисковые движки. Sphinx Search Engine. Докладчик: Роман Кудлай
Advertisements

Sphinx и его применения для поиска в БД Андрей Аксенов
Разработка системы информационного поиска в базе знаний Белякова Д.Ю. Группа С-105 МИЭМ
Поисковое продвижение: как увеличить его эффективность? Евгений Трофименко Корпорация РБС - Российские Бизнес Системы
Распределенная Архитектура LAMP приложений Петр Зайцев Директор, Percona Ltd.
Использование MySQL в сервисе дневников LiveInternet.ru Практика, практика, практика Гурьянов Андрей, программист Новиков Лев, системный администратор.
Инструменты СУБД для обработки данных. Основными инструментами обработки данных являются: - сортировка - фильтр - запрос.
СУБД Microsoft Access 2003 Элементы языка SQL. Язык SQL SQL (Structured Query Language) – структурированный язык запросов Язык SQL применяется во многих.
Базы данных Урок информатики и ИКТ, 11 класс Автор: Буравцова Ксения Валерьевна, учитель информатики и ИКТ МАОУ лицея 82 г. Челябинска.
Поиск на своем сайте, обзор open source решений Олег Бунин.
База данных – это совокупность структурированных данных определенного назначения. Структурирование данных – это объединение данных по определенным параметрам.
Объектные СУБД Поисковые технологии Специализированные ИПС и Web-сервисы Лингвистический и семантический анализ текстов документов НПЦ «ИНТЕЛТЕК ПЛЮС»
Реализация разграничения доступа на уровне строк для некоммерческих СУБД с открытым исходным кодом Научный руководитель: д.ф.-м.н. Новиков Борис Асенович.
Оптимизация MySQL Петр Зайцев Директор, Percona Ltd.
БАЗЫ ДАННЫХ. Системы управления базами данных.. Понятие о БД Данные – это любая информация, которую необходимо сохранить в компьютере и к которой регулярно.
Базы данных Подготовка к контрольной работе. База данных организованная совокупность данных, предназначенная для длительного хранения во внешней памяти.
Хранение, поиск и сортировка информации Базы данных и системы управления базами данных(СУБД)
СУБД 5. SQL для выборки данных. 2 SELECT Обработка элементов оператора SELECT выполняется в следующей последовательности: FROM – определяются имена используемых.
LOG O Поиск данных. Условия поиска.. Проверим тест! Ответы
Создание и использование запросов Тема урока. Основными инструментами обработки данных являются сортировка, фильтр и запрос. Сортировка это упорядочение.
Транксрипт:

Эффективный полнотекстовый поиск по базам данных Андрей Аксенов, Петр Зайцев Percona Ltd. shodan (at) shodan.ru

ru Поиск по базам? Базы постоянно растут 1M записей есть у всех M записей не редкость Существуют базы с 1B+ записей, в которых надо искать по тексту (ярчайший пример – Google) Широко используются open-source СУБД Мы будем говорить о MySQL Люди говорят, в мирах других СУБД схожие проблемы Встроенные решения с полнотекстовым поиском справляются недостаточно хорошо Особенно, если кроме просто поиска нужны…

ru Виды специальных задач Просто поиск – ключевая задача, но… В чистом виде бывает на удивление редко Задача, скорее, для Web поисковиков Часто нужна дополнительная сортировка По отличному от релевантности ключу – например, по цене товара Часто нужна дополнительная фильтрация Например, по категории товара или по автору поста Часто нужна группировка найденных записей Например, по дате или по источнику данных Что предлагают встроенные решения?

ru Встроенный MySQL FTS Плюс – встроен, обновляется сразу Минус – Только MyISAM Минус – плохо масштабируется Минус – не учитывает позиции слов в индексе Проблемы с релевантностью Медленный поиск по фразам Минус – только 1 FT индекс на запрос (поля…) Минус – не работает с другими индексами те. обработка WHERE, ORDER/GROUP BY, LIMIT будет производиться отдельно и вручную Вывод – зачастую не годится

ru Shootout внешних решений Тестировались известные (нам) open-source решения Коммерческие решения пусть рекламируют сами производители MySQL FTS mnoGoSearch, Предназначен для Web-поиска, но адаптируется (htdb) Lucene, Популярная Java-библиотека для поиска Sphinx, Изначально спроектирован для поиска по БД

ru ~3.5M записей, ~5 GB текста (из Wikipedia) mnoGoSearch сошел с дистанции подробнее в презентации Петра Зайцева на EuroOscon Match bool top-20, ms/q Match phrase, ms/q Match all, ms/q Индекс, MB Индексация, min SphinxLuceneMySQL Результаты тестирования

ru Имеющиеся решения mnoGoSearch Минус – проблемы со скоростью индексации и поиска FATAL – 5 GB за 24 часа проиндексировать не успел Lucene Плюс – обновляющийся на лету индекс Плюс – wildcard, fuzzy поиск Минус – цена интеграции (это Java библиотека) Минус – реализация фильтров (скорость поиска) Минус – отсутствие группировки Sphinx Минус – монолитные индексы Плюс – все остальное

ru Sphinx – обзор Внешнее решение для поиска по СУБД Две основные программы Indexer, для переиндексации FT индексов Searchd, поисковой демон Легкая интеграция Встроенная поддержка MySQL, PostgreSQL Наличие APIs для PHP, Python, Perl, Ruby, и т.д. Наличие MySQL Storage Engine Высокая скорость Скорость индексации – 4-10 MB/sec Скорость поиска – avg GB, 3.5M docs

ru Sphinx – идеология Индексация локально доступных баз данных Изначальная поддержка структурированных как в SQL документов До 256 полнотекстовых полей Любое количество атрибутов (integer/timestamp/etc) Быстрая переиндексация вместо медленного поиска Необновляемый формат индекса – изначально был выбран в расчете на максимально быстрый поиск Оказалось – что переиндексация тоже очень быстрая Для частичных обновлений – переиндексация частичных (delta) индексов раз в N минут

ru Sphinx – поиск Качество Учитываются позиции слов, не только их частоты Масштабируемость До GB текста на 1 CPU Возможен распределенный поиск Распределенные индексы полностью прозрачны для клиентских приложений Примеры Boardreader.com – около 1Bil записей, более 1TB GB текста, в кластере 16 CPU (4*2 Dual Core Servers) Mininova.org – мало (менее 1M) записей, но 2-3M запросов в сутки, поиск подстрок

ru Sphinx – спец возможности Сортировка По любой комбинации атрибутов, SQL синтаксис Фильтрация записей по условию Учитывается при поиске на максимально ранней стадии – для скорости Атрибуты всегда либо загружены в память, ли бора скопированы в нужном порядке в индексе – для скорости Fun fact – иногда полный перебор всех записей и фильтрация при помощи Sphinx оказываются быстрее соответствующей выборки из MySQL – и используются вместо нее в production…

ru Sphinx – спец возможности Группировка Возможна по какому-либо атрибуту Выполняется в фиксированной памяти Выполняется неточно (!) Выполняется быстро (по сравнению с MySQL итп) Подсветка найденных слов Спец-сервис, которому передаются тексты документов и запроса MySQL Storage Engine Для еще более сложной обработки на стороне MySQL, чем возможна на стороне Sphinx Для упрощения интеграции

ru Выводы Для полнотекстового поиска в средних и больших БД необходимы внешние решения Есть ряд требований к таким решениям, помимо просто поиска (фильтрация, группировка, и т.п) Есть ряд open-source решений разной степени полезности – и соответствия требованиям Для большей части задач, try Sphinx,