SlideShare ist ein Scribd-Unternehmen logo
1 von 34
Построение полнотекстового и
параметрического поиска на основе
MySQL, PostgreSQL, Sphinx, Redis
Виталий
Гаврилов
«Ленвендо»
План презентации
1. Возможности систем в построении поиска и их
ограничения
• Полнотекстовый поиск
• Параметрический поиск
2. Вопросы производительности и актуальности
данных
• Асинхронное обновление индекса как баланс между
актуальностью и производительностью
• Практические рекомендации по использованию очередей
сообщений AMQP
Полнотекстовый поиск -
Бизнес задача
или хочу чтобы…
Полнотекстовый поиск -
Бизнес задача
некоторые уточнения…
Решение бизнес задачи
Почему Sphinx
MySQL PostgreSQL Xapian Sphinx Solr CLucene
Скорость
индексации
314 КБ/с 522 КБ/с 1.36
МБ/с
4.5 МБ/с 2.75 МБ/с 3.8 МБ/с
Скорость
поиска
175 мс /
3.46 сек
28 мс / 2.1
сек
14 мс
/ 135
мс
7 мс / 75
мс
25 мс / 212
мс
10 мс / 212 мс
Размер
индекса
150 % 150 % 200 % 30 % 20 % 20 %
Интерфейс SQL SQL API API, SQL Веб-сервис API
Биндинги ∀ ∀ 9 6 + ∀ 8 3.5
Операторы
поиска
&*" &* &*"N-
~
&*"N-<Z &*"N-~ &*"N-~
Стеммеры Нет 15 15 15 31 15 + CJK
Стоп-слова,
синонимы
Нет Да Да Да Да Да
Soundex Нет Нет Нет Да Да Нет
Подсветка Нет Да Нет Да Да Да
Индексы
• контент
• подсказки
• синонимы
• словарь
Решение задач
Основные алгоритмы
• Раскладка клавиатуры
• Синонимы
• Орфографические ошибки
Ошибки алгоритма
Алгоритм составлен таким образом,
что ошибки (некорректные
подстановки) в его работе возможны.
Вероятность ошибок обратно
пропорциональна числу слов в
словаре и основном индексе.
Альтернативы
• Реляционные СУБД с функцией
полнотекстовой индексации с
ограничением
функциональности
• Другие полнотекстовые движки
Так почему же сфинкс?
Параметрический поиск
- Бизнес задача
ну как-то так…
Варианты решения
Параметрический поиск
• быстрый параметрический поиск по NoSQL БД с
использованием Redis
• параметрический поиск средствами MySQL
• параметрический поиск средствами PostgreSQL по
GIST- и GIN-индексам для полей типа Hstore и JSON
• параметрический поиск по полнотекстовому
индексу Sphinx
Почему Redis
• Гарантированная скорость
• Масштабируемость
• Удобные для решения задачи
встроенные операции
• Все данные в памяти
Реализация – структура
индекса
• Все документы разбиваются на категории с
одинаковым набором параметров
• Для каждой категории строится свой набор
индексов для каждой характеристики в формате
Характеристика: набор документов
• Для каждой категории для характеристик с
условно-бесконечным набором значений (цена)
документы разбиваются на диапазоны с примерно
равным числом элементов
Реализация –
получение результатов
• Пересечение множеств с одиночным выбором
средствами Redis
• Объединение множеств с множественным выбором
• Пересечение/объединение множеств с фильтром в виде
диапазонов
• Возможность сортировки средствами Redis через
временные ключи
• Дополнительная фильтрация результатов на стороне
приложения в случае, если есть фильтр по диапазонам
(может выполняться с использованием реляционной
СУБД)
Пример: Исходные данные
Продукт Цвет Жирность ID
Молоко Белый 2,5% 1
Молоко Белый 3,2% 2
Молоко Белый 4,5% 3
Кефир Белый 2,5% 4
Кефир Белый 3,2% 5
Масло Желтый 82,5% 6
Сметана Белый 15% 7
Сливки Белый 15% 8
Пример: содержание индекса
Пример: выборка белых
продуктов жирностью 4.5%
Альтернативные
решения: Sphinx
• Можно использовать как универсальный
индекс
• Нет гарантированной производительности
• Другая модель данных
• Более ресурсоемкое увеличение числа
индексируемых атрибутов
Альтернативные
решения: MySQL
• Тут все плохо…
• Низкая скорость поиска (альтернатива – индексация
всего и handlersocket для прямого доступа к данным,
но в результате - сложная логика на стороне
приложения)
• Крайне затруднительное расширение модели
данных, которое в общем случае приведет к
блокировке больших таблиц
Альтернативные
решения: PgSQL
• А вот тут все достаточно хорошо
• Специализированные типы данных:
– Hstore
– JSON (начиная с версии 9.3)
• По сути – типичная реляционная модель данных с
одним специальным полем
• Быстрые GIST/GIN индексы (GIN индекс быстрее на
выборке и медленнее на вставке. Выбор зависит от
конкретной задачи)
Так что-же выбрать
• При выборе инструмента для обеспечения
параметрического поиска необходимо опираться
на следующие факторы
– Какая реляционная СУБД используется в проекте
(если используется)
– Используется ли внешняя система
полнотекстовой индексации, которую можно
задействовать
– Имеется ли NoSQL БД Redis в проекте
• Нельзя забывать, что подключение любого нового
движка к проекту должно быть оправдано
Вопросы
производительности и
актуальности
Вопросы производительности и
актуальности
• Как без потери производительности
получить оперативное обновление данных
• Как минимизировать «дополнительные»
операции при обновлении данных
(например, перестроение полнотекстовых
и NoSQL индексов)
… ничего сложного, просто
очереди
• При получении запроса на обновление
данных, обновляем данные в центральной
БД и даем внешним системам команду на
пересчет
• Пересчет будет происходить в фоновом
режиме и не будет сказываться на
времени выполнения самой процедуры
обновления данных
Буду рад ответить на Ваши
вопросы!
Виталий Гаврилов
www.lenvendo.ru

Weitere ähnliche Inhalte

Was ist angesagt?

High load++2016.highlights (dropbox+clickhouse)
High load++2016.highlights (dropbox+clickhouse)High load++2016.highlights (dropbox+clickhouse)
High load++2016.highlights (dropbox+clickhouse)Pavel Alexeev
 
сервисы персонализации на основе данных
сервисы персонализации на основе данныхсервисы персонализации на основе данных
сервисы персонализации на основе данныхRoman Zykov
 
GCP для работы с большими данными
GCP для работы с большими даннымиGCP для работы с большими данными
GCP для работы с большими даннымиHOWWEDOIT
 
«Облачная платформа Windows Azure для высоконагруженных проектов»
«Облачная платформа Windows Azure для высоконагруженных проектов»«Облачная платформа Windows Azure для высоконагруженных проектов»
«Облачная платформа Windows Azure для высоконагруженных проектов»Nata_Churda
 
Промышленное ускорение сайтов / Николай Мациевский (Айри.рф)
Промышленное ускорение сайтов / Николай Мациевский (Айри.рф)Промышленное ускорение сайтов / Николай Мациевский (Айри.рф)
Промышленное ускорение сайтов / Николай Мациевский (Айри.рф)Ontico
 
Простая и дешёвая бизнес-аналитика на базе Google BigQuery / Алексей Паршуков...
Простая и дешёвая бизнес-аналитика на базе Google BigQuery / Алексей Паршуков...Простая и дешёвая бизнес-аналитика на базе Google BigQuery / Алексей Паршуков...
Простая и дешёвая бизнес-аналитика на базе Google BigQuery / Алексей Паршуков...Ontico
 
Василий Суханов — SAP — ICBDA 2015
Василий Суханов — SAP — ICBDA 2015Василий Суханов — SAP — ICBDA 2015
Василий Суханов — SAP — ICBDA 2015rusbase
 
Cергей Коржнев, 2ГИС
Cергей Коржнев, 2ГИСCергей Коржнев, 2ГИС
Cергей Коржнев, 2ГИСOntico
 
Как устроено API в AppMetrica
Как устроено API в AppMetricaКак устроено API в AppMetrica
Как устроено API в AppMetricaAppTractor
 
Александр Киров — Acronis — ICBDA 2015
Александр Киров — Acronis — ICBDA 2015Александр Киров — Acronis — ICBDA 2015
Александр Киров — Acronis — ICBDA 2015rusbase
 
«Система развёртывания многокомпонентного сервиса» — Алексей Салов, YaC 2013
«Система развёртывания многокомпонентного сервиса» — Алексей Салов, YaC 2013«Система развёртывания многокомпонентного сервиса» — Алексей Салов, YaC 2013
«Система развёртывания многокомпонентного сервиса» — Алексей Салов, YaC 20132ГИС Технологии
 
«Про аналитику и серебряные пули» Александр Подсобляев, Rambler&Co
«Про аналитику и серебряные пули» Александр Подсобляев, Rambler&Co«Про аналитику и серебряные пули» Александр Подсобляев, Rambler&Co
«Про аналитику и серебряные пули» Александр Подсобляев, Rambler&Coit-people
 
Автоматизация анализа логов на базе Elasticsearch
Автоматизация анализа логов на базе ElasticsearchАвтоматизация анализа логов на базе Elasticsearch
Автоматизация анализа логов на базе ElasticsearchPositive Hack Days
 
Про аналитику и серебряные пули
Про аналитику и серебряные пулиПро аналитику и серебряные пули
Про аналитику и серебряные пулиRamblerML
 
"OLAP с помощью Postgres (как мы строили BI)" Фефелов Андрей, Mastery.pro
"OLAP с помощью Postgres (как мы строили BI)" Фефелов Андрей, Mastery.pro"OLAP с помощью Postgres (как мы строили BI)" Фефелов Андрей, Mastery.pro
"OLAP с помощью Postgres (как мы строили BI)" Фефелов Андрей, Mastery.proit-people
 
«Архитектура Справочного API 2ГИС» — Сергей Коржнев, 2ГИС
«Архитектура Справочного API 2ГИС» — Сергей Коржнев, 2ГИС«Архитектура Справочного API 2ГИС» — Сергей Коржнев, 2ГИС
«Архитектура Справочного API 2ГИС» — Сергей Коржнев, 2ГИС2ГИС Технологии
 
Техническая внутренняя оптимизация больших сайтов
Техническая внутренняя оптимизация больших сайтовТехническая внутренняя оптимизация больших сайтов
Техническая внутренняя оптимизация больших сайтовIhor Bankovskyi
 
Александр Сербул —1С-Битрикс — ICBDA 2015
Александр Сербул —1С-Битрикс — ICBDA 2015Александр Сербул —1С-Битрикс — ICBDA 2015
Александр Сербул —1С-Битрикс — ICBDA 2015rusbase
 
SEO по-белому для больших сайтов
SEO по-белому для больших сайтовSEO по-белому для больших сайтов
SEO по-белому для больших сайтовIhor Bankovskyi
 

Was ist angesagt? (20)

Olap
OlapOlap
Olap
 
High load++2016.highlights (dropbox+clickhouse)
High load++2016.highlights (dropbox+clickhouse)High load++2016.highlights (dropbox+clickhouse)
High load++2016.highlights (dropbox+clickhouse)
 
сервисы персонализации на основе данных
сервисы персонализации на основе данныхсервисы персонализации на основе данных
сервисы персонализации на основе данных
 
GCP для работы с большими данными
GCP для работы с большими даннымиGCP для работы с большими данными
GCP для работы с большими данными
 
«Облачная платформа Windows Azure для высоконагруженных проектов»
«Облачная платформа Windows Azure для высоконагруженных проектов»«Облачная платформа Windows Azure для высоконагруженных проектов»
«Облачная платформа Windows Azure для высоконагруженных проектов»
 
Промышленное ускорение сайтов / Николай Мациевский (Айри.рф)
Промышленное ускорение сайтов / Николай Мациевский (Айри.рф)Промышленное ускорение сайтов / Николай Мациевский (Айри.рф)
Промышленное ускорение сайтов / Николай Мациевский (Айри.рф)
 
Простая и дешёвая бизнес-аналитика на базе Google BigQuery / Алексей Паршуков...
Простая и дешёвая бизнес-аналитика на базе Google BigQuery / Алексей Паршуков...Простая и дешёвая бизнес-аналитика на базе Google BigQuery / Алексей Паршуков...
Простая и дешёвая бизнес-аналитика на базе Google BigQuery / Алексей Паршуков...
 
Василий Суханов — SAP — ICBDA 2015
Василий Суханов — SAP — ICBDA 2015Василий Суханов — SAP — ICBDA 2015
Василий Суханов — SAP — ICBDA 2015
 
Cергей Коржнев, 2ГИС
Cергей Коржнев, 2ГИСCергей Коржнев, 2ГИС
Cергей Коржнев, 2ГИС
 
Как устроено API в AppMetrica
Как устроено API в AppMetricaКак устроено API в AppMetrica
Как устроено API в AppMetrica
 
Александр Киров — Acronis — ICBDA 2015
Александр Киров — Acronis — ICBDA 2015Александр Киров — Acronis — ICBDA 2015
Александр Киров — Acronis — ICBDA 2015
 
«Система развёртывания многокомпонентного сервиса» — Алексей Салов, YaC 2013
«Система развёртывания многокомпонентного сервиса» — Алексей Салов, YaC 2013«Система развёртывания многокомпонентного сервиса» — Алексей Салов, YaC 2013
«Система развёртывания многокомпонентного сервиса» — Алексей Салов, YaC 2013
 
«Про аналитику и серебряные пули» Александр Подсобляев, Rambler&Co
«Про аналитику и серебряные пули» Александр Подсобляев, Rambler&Co«Про аналитику и серебряные пули» Александр Подсобляев, Rambler&Co
«Про аналитику и серебряные пули» Александр Подсобляев, Rambler&Co
 
Автоматизация анализа логов на базе Elasticsearch
Автоматизация анализа логов на базе ElasticsearchАвтоматизация анализа логов на базе Elasticsearch
Автоматизация анализа логов на базе Elasticsearch
 
Про аналитику и серебряные пули
Про аналитику и серебряные пулиПро аналитику и серебряные пули
Про аналитику и серебряные пули
 
"OLAP с помощью Postgres (как мы строили BI)" Фефелов Андрей, Mastery.pro
"OLAP с помощью Postgres (как мы строили BI)" Фефелов Андрей, Mastery.pro"OLAP с помощью Postgres (как мы строили BI)" Фефелов Андрей, Mastery.pro
"OLAP с помощью Postgres (как мы строили BI)" Фефелов Андрей, Mastery.pro
 
«Архитектура Справочного API 2ГИС» — Сергей Коржнев, 2ГИС
«Архитектура Справочного API 2ГИС» — Сергей Коржнев, 2ГИС«Архитектура Справочного API 2ГИС» — Сергей Коржнев, 2ГИС
«Архитектура Справочного API 2ГИС» — Сергей Коржнев, 2ГИС
 
Техническая внутренняя оптимизация больших сайтов
Техническая внутренняя оптимизация больших сайтовТехническая внутренняя оптимизация больших сайтов
Техническая внутренняя оптимизация больших сайтов
 
Александр Сербул —1С-Битрикс — ICBDA 2015
Александр Сербул —1С-Битрикс — ICBDA 2015Александр Сербул —1С-Битрикс — ICBDA 2015
Александр Сербул —1С-Битрикс — ICBDA 2015
 
SEO по-белому для больших сайтов
SEO по-белому для больших сайтовSEO по-белому для больших сайтов
SEO по-белому для больших сайтов
 

Ähnlich wie Виталий Гаврилов (Ленвендо)

Российская СУБД Postgres Pro
Российская СУБД Postgres ProРоссийская СУБД Postgres Pro
Российская СУБД Postgres ProAndrey Fleyta
 
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Оптимиза...
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Оптимиза...16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Оптимиза...
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Оптимиза...IT-Portfolio
 
Поиск на своем сайте, обзор open source решений
Поиск на своем сайте, обзор open source решенийПоиск на своем сайте, обзор open source решений
Поиск на своем сайте, обзор open source решенийaragozin
 
Sphinx для высоко-нагруженных и масштабируемых проектов, Вячеслав Крюков
Sphinx для высоко-нагруженных и масштабируемых проектов, Вячеслав КрюковSphinx для высоко-нагруженных и масштабируемых проектов, Вячеслав Крюков
Sphinx для высоко-нагруженных и масштабируемых проектов, Вячеслав КрюковFuenteovejuna
 
олег царев Rit 2010 реляционные субд и их нереляционные реализации
олег царев Rit 2010   реляционные субд и их нереляционные реализацииолег царев Rit 2010   реляционные субд и их нереляционные реализации
олег царев Rit 2010 реляционные субд и их нереляционные реализацииrit2010
 
Rit 2010 реляционные олег царев субд и их нереляционные реализации
Rit 2010   реляционные олег царев субд и их нереляционные реализацииRit 2010   реляционные олег царев субд и их нереляционные реализации
Rit 2010 реляционные олег царев субд и их нереляционные реализацииrit2010
 
Поиск на своем сайте, обзор Open source решений (Алексей Рагозин)
Поиск на своем сайте, обзор Open source решений (Алексей Рагозин)Поиск на своем сайте, обзор Open source решений (Алексей Рагозин)
Поиск на своем сайте, обзор Open source решений (Алексей Рагозин)Ontico
 
Андрей Зайчиков "Архитектура распределенных кластеров NoSQL на AWS"
Андрей Зайчиков "Архитектура распределенных кластеров NoSQL на AWS"Андрей Зайчиков "Архитектура распределенных кластеров NoSQL на AWS"
Андрей Зайчиков "Архитектура распределенных кластеров NoSQL на AWS"IT Event
 
Моделирование для NoSQL БД
Моделирование для NoSQL БДМоделирование для NoSQL БД
Моделирование для NoSQL БДAndrew Sovtsov
 
Презентация аналитической системы для ритейла СуперМаг BI
Презентация аналитической системы для ритейла СуперМаг BIПрезентация аналитической системы для ритейла СуперМаг BI
Презентация аналитической системы для ритейла СуперМаг BIОникс Софт
 
масштабируемый Sphinx кластер. вячеслав крюков. зал 1
масштабируемый Sphinx кластер. вячеслав крюков. зал 1масштабируемый Sphinx кластер. вячеслав крюков. зал 1
масштабируемый Sphinx кластер. вячеслав крюков. зал 1rit2011
 
SQL Server Analysis Services 2014: табличная модель - альтернатива кубам?
SQL Server Analysis Services 2014: табличная модель - альтернатива кубам?SQL Server Analysis Services 2014: табличная модель - альтернатива кубам?
SQL Server Analysis Services 2014: табличная модель - альтернатива кубам? Andrey Korshikov
 
"Новые возможности MySQL 5.7"
"Новые возможности MySQL 5.7""Новые возможности MySQL 5.7"
"Новые возможности MySQL 5.7"Badoo Development
 
Lan-Crawler Bachlor RU
Lan-Crawler Bachlor RULan-Crawler Bachlor RU
Lan-Crawler Bachlor RUcDima
 
как из трех стоек сделать две.
как из трех стоек сделать две.как из трех стоек сделать две.
как из трех стоек сделать две.Serguei Gitinsky
 
20111002 information retrieval raskovalov_lecture3
20111002 information retrieval raskovalov_lecture320111002 information retrieval raskovalov_lecture3
20111002 information retrieval raskovalov_lecture3Computer Science Club
 
Web весна 2012 лекция 6
Web весна 2012 лекция 6Web весна 2012 лекция 6
Web весна 2012 лекция 6Technopark
 
Вадим Шашенко, 2ГИС
Вадим Шашенко, 2ГИСВадим Шашенко, 2ГИС
Вадим Шашенко, 2ГИСOntico
 
«Дорожная сеть в графовой базе данных Neo4j» — Вадим Шашенко, 2ГИС
«Дорожная сеть в графовой базе данных Neo4j» — Вадим Шашенко, 2ГИС«Дорожная сеть в графовой базе данных Neo4j» — Вадим Шашенко, 2ГИС
«Дорожная сеть в графовой базе данных Neo4j» — Вадим Шашенко, 2ГИС2ГИС Технологии
 
High load2007 scaling-web-applications-rus
High load2007 scaling-web-applications-rusHigh load2007 scaling-web-applications-rus
High load2007 scaling-web-applications-rusVladd Ev
 

Ähnlich wie Виталий Гаврилов (Ленвендо) (20)

Российская СУБД Postgres Pro
Российская СУБД Postgres ProРоссийская СУБД Postgres Pro
Российская СУБД Postgres Pro
 
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Оптимиза...
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Оптимиза...16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Оптимиза...
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Оптимиза...
 
Поиск на своем сайте, обзор open source решений
Поиск на своем сайте, обзор open source решенийПоиск на своем сайте, обзор open source решений
Поиск на своем сайте, обзор open source решений
 
Sphinx для высоко-нагруженных и масштабируемых проектов, Вячеслав Крюков
Sphinx для высоко-нагруженных и масштабируемых проектов, Вячеслав КрюковSphinx для высоко-нагруженных и масштабируемых проектов, Вячеслав Крюков
Sphinx для высоко-нагруженных и масштабируемых проектов, Вячеслав Крюков
 
олег царев Rit 2010 реляционные субд и их нереляционные реализации
олег царев Rit 2010   реляционные субд и их нереляционные реализацииолег царев Rit 2010   реляционные субд и их нереляционные реализации
олег царев Rit 2010 реляционные субд и их нереляционные реализации
 
Rit 2010 реляционные олег царев субд и их нереляционные реализации
Rit 2010   реляционные олег царев субд и их нереляционные реализацииRit 2010   реляционные олег царев субд и их нереляционные реализации
Rit 2010 реляционные олег царев субд и их нереляционные реализации
 
Поиск на своем сайте, обзор Open source решений (Алексей Рагозин)
Поиск на своем сайте, обзор Open source решений (Алексей Рагозин)Поиск на своем сайте, обзор Open source решений (Алексей Рагозин)
Поиск на своем сайте, обзор Open source решений (Алексей Рагозин)
 
Андрей Зайчиков "Архитектура распределенных кластеров NoSQL на AWS"
Андрей Зайчиков "Архитектура распределенных кластеров NoSQL на AWS"Андрей Зайчиков "Архитектура распределенных кластеров NoSQL на AWS"
Андрей Зайчиков "Архитектура распределенных кластеров NoSQL на AWS"
 
Моделирование для NoSQL БД
Моделирование для NoSQL БДМоделирование для NoSQL БД
Моделирование для NoSQL БД
 
Презентация аналитической системы для ритейла СуперМаг BI
Презентация аналитической системы для ритейла СуперМаг BIПрезентация аналитической системы для ритейла СуперМаг BI
Презентация аналитической системы для ритейла СуперМаг BI
 
масштабируемый Sphinx кластер. вячеслав крюков. зал 1
масштабируемый Sphinx кластер. вячеслав крюков. зал 1масштабируемый Sphinx кластер. вячеслав крюков. зал 1
масштабируемый Sphinx кластер. вячеслав крюков. зал 1
 
SQL Server Analysis Services 2014: табличная модель - альтернатива кубам?
SQL Server Analysis Services 2014: табличная модель - альтернатива кубам?SQL Server Analysis Services 2014: табличная модель - альтернатива кубам?
SQL Server Analysis Services 2014: табличная модель - альтернатива кубам?
 
"Новые возможности MySQL 5.7"
"Новые возможности MySQL 5.7""Новые возможности MySQL 5.7"
"Новые возможности MySQL 5.7"
 
Lan-Crawler Bachlor RU
Lan-Crawler Bachlor RULan-Crawler Bachlor RU
Lan-Crawler Bachlor RU
 
как из трех стоек сделать две.
как из трех стоек сделать две.как из трех стоек сделать две.
как из трех стоек сделать две.
 
20111002 information retrieval raskovalov_lecture3
20111002 information retrieval raskovalov_lecture320111002 information retrieval raskovalov_lecture3
20111002 information retrieval raskovalov_lecture3
 
Web весна 2012 лекция 6
Web весна 2012 лекция 6Web весна 2012 лекция 6
Web весна 2012 лекция 6
 
Вадим Шашенко, 2ГИС
Вадим Шашенко, 2ГИСВадим Шашенко, 2ГИС
Вадим Шашенко, 2ГИС
 
«Дорожная сеть в графовой базе данных Neo4j» — Вадим Шашенко, 2ГИС
«Дорожная сеть в графовой базе данных Neo4j» — Вадим Шашенко, 2ГИС«Дорожная сеть в графовой базе данных Neo4j» — Вадим Шашенко, 2ГИС
«Дорожная сеть в графовой базе данных Neo4j» — Вадим Шашенко, 2ГИС
 
High load2007 scaling-web-applications-rus
High load2007 scaling-web-applications-rusHigh load2007 scaling-web-applications-rus
High load2007 scaling-web-applications-rus
 

Mehr von 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
 

Mehr von 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...
 

Виталий Гаврилов (Ленвендо)

  • 1. Построение полнотекстового и параметрического поиска на основе MySQL, PostgreSQL, Sphinx, Redis Виталий Гаврилов «Ленвендо»
  • 2. План презентации 1. Возможности систем в построении поиска и их ограничения • Полнотекстовый поиск • Параметрический поиск 2. Вопросы производительности и актуальности данных • Асинхронное обновление индекса как баланс между актуальностью и производительностью • Практические рекомендации по использованию очередей сообщений AMQP
  • 3. Полнотекстовый поиск - Бизнес задача или хочу чтобы…
  • 4. Полнотекстовый поиск - Бизнес задача некоторые уточнения…
  • 6. Почему Sphinx MySQL PostgreSQL Xapian Sphinx Solr CLucene Скорость индексации 314 КБ/с 522 КБ/с 1.36 МБ/с 4.5 МБ/с 2.75 МБ/с 3.8 МБ/с Скорость поиска 175 мс / 3.46 сек 28 мс / 2.1 сек 14 мс / 135 мс 7 мс / 75 мс 25 мс / 212 мс 10 мс / 212 мс Размер индекса 150 % 150 % 200 % 30 % 20 % 20 % Интерфейс SQL SQL API API, SQL Веб-сервис API Биндинги ∀ ∀ 9 6 + ∀ 8 3.5 Операторы поиска &*" &* &*"N- ~ &*"N-<Z &*"N-~ &*"N-~ Стеммеры Нет 15 15 15 31 15 + CJK Стоп-слова, синонимы Нет Да Да Да Да Да Soundex Нет Нет Нет Да Да Нет Подсветка Нет Да Нет Да Да Да
  • 8. Решение задач Основные алгоритмы • Раскладка клавиатуры • Синонимы • Орфографические ошибки
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14. Ошибки алгоритма Алгоритм составлен таким образом, что ошибки (некорректные подстановки) в его работе возможны. Вероятность ошибок обратно пропорциональна числу слов в словаре и основном индексе.
  • 15. Альтернативы • Реляционные СУБД с функцией полнотекстовой индексации с ограничением функциональности • Другие полнотекстовые движки
  • 16. Так почему же сфинкс?
  • 17. Параметрический поиск - Бизнес задача ну как-то так…
  • 19. Параметрический поиск • быстрый параметрический поиск по NoSQL БД с использованием Redis • параметрический поиск средствами MySQL • параметрический поиск средствами PostgreSQL по GIST- и GIN-индексам для полей типа Hstore и JSON • параметрический поиск по полнотекстовому индексу Sphinx
  • 20. Почему Redis • Гарантированная скорость • Масштабируемость • Удобные для решения задачи встроенные операции • Все данные в памяти
  • 21. Реализация – структура индекса • Все документы разбиваются на категории с одинаковым набором параметров • Для каждой категории строится свой набор индексов для каждой характеристики в формате Характеристика: набор документов • Для каждой категории для характеристик с условно-бесконечным набором значений (цена) документы разбиваются на диапазоны с примерно равным числом элементов
  • 22. Реализация – получение результатов • Пересечение множеств с одиночным выбором средствами Redis • Объединение множеств с множественным выбором • Пересечение/объединение множеств с фильтром в виде диапазонов • Возможность сортировки средствами Redis через временные ключи • Дополнительная фильтрация результатов на стороне приложения в случае, если есть фильтр по диапазонам (может выполняться с использованием реляционной СУБД)
  • 23. Пример: Исходные данные Продукт Цвет Жирность ID Молоко Белый 2,5% 1 Молоко Белый 3,2% 2 Молоко Белый 4,5% 3 Кефир Белый 2,5% 4 Кефир Белый 3,2% 5 Масло Желтый 82,5% 6 Сметана Белый 15% 7 Сливки Белый 15% 8
  • 26. Альтернативные решения: Sphinx • Можно использовать как универсальный индекс • Нет гарантированной производительности • Другая модель данных • Более ресурсоемкое увеличение числа индексируемых атрибутов
  • 27. Альтернативные решения: MySQL • Тут все плохо… • Низкая скорость поиска (альтернатива – индексация всего и handlersocket для прямого доступа к данным, но в результате - сложная логика на стороне приложения) • Крайне затруднительное расширение модели данных, которое в общем случае приведет к блокировке больших таблиц
  • 28. Альтернативные решения: PgSQL • А вот тут все достаточно хорошо • Специализированные типы данных: – Hstore – JSON (начиная с версии 9.3) • По сути – типичная реляционная модель данных с одним специальным полем • Быстрые GIST/GIN индексы (GIN индекс быстрее на выборке и медленнее на вставке. Выбор зависит от конкретной задачи)
  • 29. Так что-же выбрать • При выборе инструмента для обеспечения параметрического поиска необходимо опираться на следующие факторы – Какая реляционная СУБД используется в проекте (если используется) – Используется ли внешняя система полнотекстовой индексации, которую можно задействовать – Имеется ли NoSQL БД Redis в проекте • Нельзя забывать, что подключение любого нового движка к проекту должно быть оправдано
  • 31. Вопросы производительности и актуальности • Как без потери производительности получить оперативное обновление данных • Как минимизировать «дополнительные» операции при обновлении данных (например, перестроение полнотекстовых и NoSQL индексов)
  • 32. … ничего сложного, просто очереди • При получении запроса на обновление данных, обновляем данные в центральной БД и даем внешним системам команду на пересчет • Пересчет будет происходить в фоновом режиме и не будет сказываться на времени выполнения самой процедуры обновления данных
  • 33.
  • 34. Буду рад ответить на Ваши вопросы! Виталий Гаврилов www.lenvendo.ru