SlideShare une entreprise Scribd logo
1  sur  33
Télécharger pour lire hors ligne
Доменно специфичные базы 
данных и рассылка 
@aviasales 
Каплуновский 
Борис
Agenda 
● Что делает aviasales 
● Что делает рассылка aviasales 
● Зачем нам Domain Specific Database 
● Детали реализации фильтрующего дерева 
● Ограничения решения 
● Масштабирование решения
Что делает aviasales
Фильтры рассылки 
Предпочитаемые 
авиакомпании 
Пункты 
вылета/назначения 
Стоимость 
билетов 
Даты 
вылета/прилёта 
Страна 
назначения 
Месяца 
вылета/прилёта 
Длительность 
прибывания 
Количество 
пересадок 
Номера 
рейсов 
Аэропорты 
пересадок
Движок рассылки должен 
● 1 000 000 раз в сутки 
● Проверить 1mb документ 
● На соответствие ~1 000 000 предикатам 
И не вспотеть!
Структура документа 
Результаты поиска 
Курсы Валют 
Информация 
о OTA 
Информация 
о Аэропортах 
Предложения 
Предложение 
Цена OTA 1 Цена OTA 2 
Сегмент 1 
Перелёт 1 
HKT HKG 
Перелёт 1 
HKG DME 
Сегмент 2 
Перелёт 1 
DME BKK 
Перелёт 1 
BKK HKT
Структура подписок 
orig='MOW' and dest='HKT' and price<40000 
orig='MOW' and dest_country='US' and price<60000 
orig='LED' and switch_count<2 and price<2000 
orig='LED' and 'CDG' in switch_airports 
И подобных выражений сотни тысяч...
Требования к базе данных 
● Проверка на соответствие документа всем 
предикатам за <50ms 
● Низкое потребление ресурсов 
● Простота интеграции 
● Расширяемость 
● Масштабируемость
Почему не подходит SQL 
● Неоднородные наборы предикатов 
● Нетипичные для SQL входные данные – 
огромное дерево 
● Инверсия логики: 
● В SQL хранят данные и выбирают данные 
соответствующие предикатам запроса 
● Для рассылки в базе надо хранить предикаты 
и проверять соответсвие пришедших данных 
предикатам
Ловушки: Протокол взаимодействия 
● Программисты любят придумывать новые 
протоколы mysql/postgres/redis/memcached 
● Изобретение протокола - трата времени 
● Протоколы на все случаи уже изобретены
Протокол взаимодействия HTTP 
● Не надо писать клиент и сервер 
● Удобно дебажить и тестировать 
● Проксируется балансируется 
кешируется 
● Существуют реализации для 
всего
Ловушка: низкоуровневый язык 
● Реализация на Java/C/Go/Erlang чтобы 
быстро работало! 
● Скорость - следствие хороших 
алгоритмов, а не языка 
● Низкоуровневые языки громоздки 
● Их сложно отлаживать
Язык реализации Python 
( ) 
● Можно быстро написать прототип и 
проверить эффективность алгоритмов 
● Много сторонних библиотек 
● Компактный и читаемый код
Ловушка: одно решение для всего 
● Программисты любят разрабатывать 
комбайны решающие все проблемы на 
земле 
● Потеря фокуса 
● Сложно заставить комбайн решать все 
задачи одинаково хорошо 
● Создание комбайнов ВСЕГДА приводит 
к долгострою
Структура подписки 
orig='MOW' and dest='HKT' and price<4000 
Дизьюнкт Свойство 
документа 
Константа 
Булевый оператор
Структура подписки 
orig='MOW' and dest='HKT' and price<4000 
● У свойств документа разная сложность вычисления 
● Оператор = проще операторов <,> 
● Порядок вычисления дизьюнктов не оказывает 
влияния на результат
Структура подписки 
if (dest='HKT')then 
if(orig='MOW') then 
if(price<4000) 
match 
● Свойства документа вычисляются лениво 
● Пытаемся как можно раньше отсеять как можно 
больше поддеревьев 
● Переупорядочивание дизьюнктов позволяет экономить 
ресурсы
Приоритеты операций 
Дешевле проверка выше приоритет 
= < > 
Больше урезается дерево выше 
приоритет 
ORIGIN, DATE 
Проще расчитывается значение 
свойства выше приорит 
ORIGIN, PRICE
свойства + предикаты = узлы дерева 
ЦЕНА < 
10000 15000 15500 15700 
Свойства 
Оператор 
ВРЕМЯ ПЕРЕСАДКИ > 
80мин 95мин 110мин 200мин 
Константы
Устройство дерева 
node 
op – string “” 
property – string “” 
children – hash {} sorted_keys - array []
Устройство дерева 
leaf 
parent - * callback_url – string “”
Дерево поиска 
orig = 
MOW LED HKT 
HKT 
BKK
Дерево поиска 
price < 
10000 20000 30000 40000 
22000
Фильтрующие свойства 
Количество пересадок < 
0 1 2 3 
Результаты поиска 
Курсы Валют 
Информация 
о OTA 
Информация 
о Аэропортах 
Предложения 
1 Пересадка 3 Пересадки 0 Пересадок
Фильтрующие свойства 
Количество пересадок < 
0 1 2 3 
Результаты поиска 
Курсы Валют 
Информация 
о OTA 
Информация 
о Аэропортах 
Предложения 
1 Пересадка 3 Пересадки 0 Пересадок
Небольшие уловки 
● Все подписки имеют ссылку на родителя для 
ускорения операции удаления 
● Рядом с деревом хранится сортированный массив 
сслылок на все листья дерева для ускорения 
операции удаления из дерева 
● Результат вычисления свойств документа кешируется
Как выглядит система в сборе 
TRF 
fast in-memory DSD 
RailsApp 
subscription interface 
RailsApp 
mail composer & sender 
SMTP Server 
MySQL
Масштабирование по кличеству 
обрабатываемых документов 
● Правила вставляются в оба дерева 
● Обрабатываемый документ отправляется в одно из 
деревьев 
Rules Documents 
Tree1 Tree2
Масштабирование по кличеству предикатов в 
дереве 
Rules Documents 
Tree1 Tree2 
● Правила вставляются в одно из деревьев 
● Обрабатываемый документ отправляется в оба дерева
Ограничения решения 
● Алгоритм становится неэффективным если один 
документ подходит для значительной части дерева 
● Дерево хранит данные в памяти, сохранность данных 
обеспечивается внешними средствами 
● Для добавления новых свойств документа нужен 
перезапуск дерева
Что получилось: технологии 
● Два процесса 
● Два ядра CPU 
● 1.5gb Памяти 
● 1 000 000 документов в сутки 
● 150K Писем в день 
● Время ответа базы в среднем 28ms
Что получилось: бизнес 
● Продукт был запущен через два 
месяца после начала разработки 
● Проект окупился в течении двух 
месяцев после запуска 
● Технология открыла дорогу новым 
фичам продукта
The End :(

Contenu connexe

Tendances

Near-realtime аналитика событий в высоконагруженном проекте
Near-realtime аналитика событий в высоконагруженном проектеNear-realtime аналитика событий в высоконагруженном проекте
Near-realtime аналитика событий в высоконагруженном проектеAlexandr Krasheninnikov
 
Сага о кластере. Все что вы хотели знать про горизонтальное масштабирование в...
Сага о кластере. Все что вы хотели знать про горизонтальное масштабирование в...Сага о кластере. Все что вы хотели знать про горизонтальное масштабирование в...
Сага о кластере. Все что вы хотели знать про горизонтальное масштабирование в...Ontico
 
Как считать и анализировать сотни гигабит трафика в секунду, Станислав Николо...
Как считать и анализировать сотни гигабит трафика в секунду, Станислав Николо...Как считать и анализировать сотни гигабит трафика в секунду, Станислав Николо...
Как считать и анализировать сотни гигабит трафика в секунду, Станислав Николо...Ontico
 
Twisted Framework - сетевые приложения в Python
Twisted Framework - сетевые приложения в PythonTwisted Framework - сетевые приложения в Python
Twisted Framework - сетевые приложения в PythonAndrey Smirnov
 
«Путь от монолита на PHP к микросервисам на Scala» – Денис Иванов, 2ГИС
«Путь от монолита на PHP к микросервисам на Scala» – Денис Иванов, 2ГИС «Путь от монолита на PHP к микросервисам на Scala» – Денис Иванов, 2ГИС
«Путь от монолита на PHP к микросервисам на Scala» – Денис Иванов, 2ГИС 2ГИС Технологии
 
«Дорожная сеть в графовой базе данных Neo4j» — Вадим Шашенко, 2ГИС
«Дорожная сеть в графовой базе данных Neo4j» — Вадим Шашенко, 2ГИС«Дорожная сеть в графовой базе данных Neo4j» — Вадим Шашенко, 2ГИС
«Дорожная сеть в графовой базе данных Neo4j» — Вадим Шашенко, 2ГИС2ГИС Технологии
 
Анатомия веб сервиса (HighLoad-2014)
Анатомия веб сервиса (HighLoad-2014)Анатомия веб сервиса (HighLoad-2014)
Анатомия веб сервиса (HighLoad-2014)Andrey Smirnov
 
SphinxSearch Meetup - Tips&tricks
SphinxSearch Meetup - Tips&tricksSphinxSearch Meetup - Tips&tricks
SphinxSearch Meetup - Tips&tricksRoman Pavlushko
 
Путь от монолита на PHP к микросервисам на Scala / Денис Иванов (2GIS)
Путь от монолита на PHP к микросервисам на Scala  / Денис Иванов (2GIS)Путь от монолита на PHP к микросервисам на Scala  / Денис Иванов (2GIS)
Путь от монолита на PHP к микросервисам на Scala / Денис Иванов (2GIS)Ontico
 
AVITO. Решардинг Redis без даунтайма. DevConf 2012
AVITO. Решардинг Redis без даунтайма. DevConf 2012AVITO. Решардинг Redis без даунтайма. DevConf 2012
AVITO. Решардинг Redis без даунтайма. DevConf 2012Roman Pavlushko
 
Консольные приложения на Go
Консольные приложения на GoКонсольные приложения на Go
Консольные приложения на GoAndrey Smirnov
 
Эволюция клиентской разработки: от веба ко "всеобщей мобилизации” или mobile-...
Эволюция клиентской разработки: от веба ко "всеобщей мобилизации” или mobile-...Эволюция клиентской разработки: от веба ко "всеобщей мобилизации” или mobile-...
Эволюция клиентской разработки: от веба ко "всеобщей мобилизации” или mobile-...Pavel Dovbush
 
AVITO. Решаем проблемы по мере их поступления. Стачка 2013
AVITO. Решаем проблемы по мере их поступления. Стачка 2013AVITO. Решаем проблемы по мере их поступления. Стачка 2013
AVITO. Решаем проблемы по мере их поступления. Стачка 2013Roman Pavlushko
 
Эволюция процесса деплоя в проекте / Денис Яковлев (2ГИС)
Эволюция процесса деплоя в проекте / Денис Яковлев (2ГИС)Эволюция процесса деплоя в проекте / Денис Яковлев (2ГИС)
Эволюция процесса деплоя в проекте / Денис Яковлев (2ГИС)Ontico
 
Web performance 101 [GDG nsk webdev meetup #3]
Web performance 101 [GDG nsk webdev meetup #3]Web performance 101 [GDG nsk webdev meetup #3]
Web performance 101 [GDG nsk webdev meetup #3]Eugene Chekan
 
Загрузка больших объемов данных для бизнес-аналитики
Загрузка больших объемов данных для бизнес-аналитикиЗагрузка больших объемов данных для бизнес-аналитики
Загрузка больших объемов данных для бизнес-аналитикиBadoo Development
 
Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...
Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...
Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...Ontico
 
С чего начать внедрение Hadoop в компании. Доклад Алексея Еремихина (Badoo).
С чего начать внедрение Hadoop в компании. Доклад Алексея Еремихина (Badoo). С чего начать внедрение Hadoop в компании. Доклад Алексея Еремихина (Badoo).
С чего начать внедрение Hadoop в компании. Доклад Алексея Еремихина (Badoo). Badoo Development
 
101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов ...
101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов ...101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов ...
101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов ...Ontico
 

Tendances (20)

Near-realtime аналитика событий в высоконагруженном проекте
Near-realtime аналитика событий в высоконагруженном проектеNear-realtime аналитика событий в высоконагруженном проекте
Near-realtime аналитика событий в высоконагруженном проекте
 
Сага о кластере. Все что вы хотели знать про горизонтальное масштабирование в...
Сага о кластере. Все что вы хотели знать про горизонтальное масштабирование в...Сага о кластере. Все что вы хотели знать про горизонтальное масштабирование в...
Сага о кластере. Все что вы хотели знать про горизонтальное масштабирование в...
 
Как считать и анализировать сотни гигабит трафика в секунду, Станислав Николо...
Как считать и анализировать сотни гигабит трафика в секунду, Станислав Николо...Как считать и анализировать сотни гигабит трафика в секунду, Станислав Николо...
Как считать и анализировать сотни гигабит трафика в секунду, Станислав Николо...
 
Twisted Framework - сетевые приложения в Python
Twisted Framework - сетевые приложения в PythonTwisted Framework - сетевые приложения в Python
Twisted Framework - сетевые приложения в Python
 
«Путь от монолита на PHP к микросервисам на Scala» – Денис Иванов, 2ГИС
«Путь от монолита на PHP к микросервисам на Scala» – Денис Иванов, 2ГИС «Путь от монолита на PHP к микросервисам на Scala» – Денис Иванов, 2ГИС
«Путь от монолита на PHP к микросервисам на Scala» – Денис Иванов, 2ГИС
 
Avito Stachka 2012
Avito Stachka 2012Avito Stachka 2012
Avito Stachka 2012
 
«Дорожная сеть в графовой базе данных Neo4j» — Вадим Шашенко, 2ГИС
«Дорожная сеть в графовой базе данных Neo4j» — Вадим Шашенко, 2ГИС«Дорожная сеть в графовой базе данных Neo4j» — Вадим Шашенко, 2ГИС
«Дорожная сеть в графовой базе данных Neo4j» — Вадим Шашенко, 2ГИС
 
Анатомия веб сервиса (HighLoad-2014)
Анатомия веб сервиса (HighLoad-2014)Анатомия веб сервиса (HighLoad-2014)
Анатомия веб сервиса (HighLoad-2014)
 
SphinxSearch Meetup - Tips&tricks
SphinxSearch Meetup - Tips&tricksSphinxSearch Meetup - Tips&tricks
SphinxSearch Meetup - Tips&tricks
 
Путь от монолита на PHP к микросервисам на Scala / Денис Иванов (2GIS)
Путь от монолита на PHP к микросервисам на Scala  / Денис Иванов (2GIS)Путь от монолита на PHP к микросервисам на Scala  / Денис Иванов (2GIS)
Путь от монолита на PHP к микросервисам на Scala / Денис Иванов (2GIS)
 
AVITO. Решардинг Redis без даунтайма. DevConf 2012
AVITO. Решардинг Redis без даунтайма. DevConf 2012AVITO. Решардинг Redis без даунтайма. DevConf 2012
AVITO. Решардинг Redis без даунтайма. DevConf 2012
 
Консольные приложения на Go
Консольные приложения на GoКонсольные приложения на Go
Консольные приложения на Go
 
Эволюция клиентской разработки: от веба ко "всеобщей мобилизации” или mobile-...
Эволюция клиентской разработки: от веба ко "всеобщей мобилизации” или mobile-...Эволюция клиентской разработки: от веба ко "всеобщей мобилизации” или mobile-...
Эволюция клиентской разработки: от веба ко "всеобщей мобилизации” или mobile-...
 
AVITO. Решаем проблемы по мере их поступления. Стачка 2013
AVITO. Решаем проблемы по мере их поступления. Стачка 2013AVITO. Решаем проблемы по мере их поступления. Стачка 2013
AVITO. Решаем проблемы по мере их поступления. Стачка 2013
 
Эволюция процесса деплоя в проекте / Денис Яковлев (2ГИС)
Эволюция процесса деплоя в проекте / Денис Яковлев (2ГИС)Эволюция процесса деплоя в проекте / Денис Яковлев (2ГИС)
Эволюция процесса деплоя в проекте / Денис Яковлев (2ГИС)
 
Web performance 101 [GDG nsk webdev meetup #3]
Web performance 101 [GDG nsk webdev meetup #3]Web performance 101 [GDG nsk webdev meetup #3]
Web performance 101 [GDG nsk webdev meetup #3]
 
Загрузка больших объемов данных для бизнес-аналитики
Загрузка больших объемов данных для бизнес-аналитикиЗагрузка больших объемов данных для бизнес-аналитики
Загрузка больших объемов данных для бизнес-аналитики
 
Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...
Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...
Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...
 
С чего начать внедрение Hadoop в компании. Доклад Алексея Еремихина (Badoo).
С чего начать внедрение Hadoop в компании. Доклад Алексея Еремихина (Badoo). С чего начать внедрение Hadoop в компании. Доклад Алексея Еремихина (Badoo).
С чего начать внедрение Hadoop в компании. Доклад Алексея Еремихина (Badoo).
 
101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов ...
101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов ...101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов ...
101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов ...
 

Similaire à Доменно специфичные базы данных и рассылка Aviasales, Борис Каплуновский (Aviasales)

20111002 information retrieval raskovalov_lecture3
20111002 information retrieval raskovalov_lecture320111002 information retrieval raskovalov_lecture3
20111002 information retrieval raskovalov_lecture3Computer Science Club
 
кри 2014 elastic search рациональный подход к созданию собственной системы а...
кри 2014 elastic search  рациональный подход к созданию собственной системы а...кри 2014 elastic search  рациональный подход к созданию собственной системы а...
кри 2014 elastic search рациональный подход к созданию собственной системы а...Vyacheslav Nikulin
 
Oracle Timesten
Oracle TimestenOracle Timesten
Oracle TimestenOntico
 
Near-realtime аналитика событий в высоконагруженном проекте / Александр Краше...
Near-realtime аналитика событий в высоконагруженном проекте / Александр Краше...Near-realtime аналитика событий в высоконагруженном проекте / Александр Краше...
Near-realtime аналитика событий в высоконагруженном проекте / Александр Краше...Ontico
 
Near-realtime аналитика событий в высоконагруженном проекте
Near-realtime аналитика событий в высоконагруженном проектеNear-realtime аналитика событий в высоконагруженном проекте
Near-realtime аналитика событий в высоконагруженном проектеBadoo Development
 
Near-realtime аналитика событий в высоконагруженном проекте
Near-realtime аналитика событий в высоконагруженном проектеNear-realtime аналитика событий в высоконагруженном проекте
Near-realtime аналитика событий в высоконагруженном проектеYulia Kotova
 
Тестирование производительности систем мониторинга на платформе Microsoft SCO...
Тестирование производительности систем мониторинга на платформе Microsoft SCO...Тестирование производительности систем мониторинга на платформе Microsoft SCO...
Тестирование производительности систем мониторинга на платформе Microsoft SCO...SQALab
 
Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)
Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)
Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)Ontico
 
ECP и API управления процессами. InterSystems Meetup Sankt-Peterburg 2014
ECP и API управления процессами. InterSystems Meetup Sankt-Peterburg 2014ECP и API управления процессами. InterSystems Meetup Sankt-Peterburg 2014
ECP и API управления процессами. InterSystems Meetup Sankt-Peterburg 2014InterSystems
 
High Load 2009 Dimaa Rus Ready
High Load 2009 Dimaa Rus ReadyHigh Load 2009 Dimaa Rus Ready
High Load 2009 Dimaa Rus ReadyHighLoad2009
 
CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...
CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...
CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...CodeFest
 
Kubasov 1 7_deploy
Kubasov 1 7_deployKubasov 1 7_deploy
Kubasov 1 7_deploykuchinskaya
 
Управление услугами с помощью NETCONF/YANG и оркестратора Cisco NSO
Управление услугами с помощью NETCONF/YANG и оркестратора Cisco NSOУправление услугами с помощью NETCONF/YANG и оркестратора Cisco NSO
Управление услугами с помощью NETCONF/YANG и оркестратора Cisco NSOCisco Russia
 
Всеволод Поляков "История одного мониторинга"
Всеволод Поляков "История одного мониторинга"Всеволод Поляков "История одного мониторинга"
Всеволод Поляков "История одного мониторинга"Fwdays
 
GRANIT — Global Russian Advanced Network Initiative
GRANIT — Global Russian Advanced Network InitiativeGRANIT — Global Russian Advanced Network Initiative
GRANIT — Global Russian Advanced Network InitiativeARCCN
 
Поиск наоборот: материализуем результаты поиска / Николай Сивко (okmeter.io)
Поиск наоборот: материализуем результаты поиска / Николай Сивко (okmeter.io)Поиск наоборот: материализуем результаты поиска / Николай Сивко (okmeter.io)
Поиск наоборот: материализуем результаты поиска / Николай Сивко (okmeter.io)Ontico
 
Поиск наизнанку
Поиск наизнанкуПоиск наизнанку
Поиск наизнанкуNikolay Sivko
 
Андрей Зайчиков "Архитектура распределенных кластеров NoSQL на AWS"
Андрей Зайчиков "Архитектура распределенных кластеров NoSQL на AWS"Андрей Зайчиков "Архитектура распределенных кластеров NoSQL на AWS"
Андрей Зайчиков "Архитектура распределенных кластеров NoSQL на AWS"IT Event
 
PUG #9 at OWOX: Поиск узких мест в приложении на PHP
PUG #9 at OWOX: Поиск узких мест в приложении на PHP                PUG #9 at OWOX: Поиск узких мест в приложении на PHP
PUG #9 at OWOX: Поиск узких мест в приложении на PHP Анна Магас
 

Similaire à Доменно специфичные базы данных и рассылка Aviasales, Борис Каплуновский (Aviasales) (20)

20111002 information retrieval raskovalov_lecture3
20111002 information retrieval raskovalov_lecture320111002 information retrieval raskovalov_lecture3
20111002 information retrieval raskovalov_lecture3
 
кри 2014 elastic search рациональный подход к созданию собственной системы а...
кри 2014 elastic search  рациональный подход к созданию собственной системы а...кри 2014 elastic search  рациональный подход к созданию собственной системы а...
кри 2014 elastic search рациональный подход к созданию собственной системы а...
 
Sivko
SivkoSivko
Sivko
 
Oracle Timesten
Oracle TimestenOracle Timesten
Oracle Timesten
 
Near-realtime аналитика событий в высоконагруженном проекте / Александр Краше...
Near-realtime аналитика событий в высоконагруженном проекте / Александр Краше...Near-realtime аналитика событий в высоконагруженном проекте / Александр Краше...
Near-realtime аналитика событий в высоконагруженном проекте / Александр Краше...
 
Near-realtime аналитика событий в высоконагруженном проекте
Near-realtime аналитика событий в высоконагруженном проектеNear-realtime аналитика событий в высоконагруженном проекте
Near-realtime аналитика событий в высоконагруженном проекте
 
Near-realtime аналитика событий в высоконагруженном проекте
Near-realtime аналитика событий в высоконагруженном проектеNear-realtime аналитика событий в высоконагруженном проекте
Near-realtime аналитика событий в высоконагруженном проекте
 
Тестирование производительности систем мониторинга на платформе Microsoft SCO...
Тестирование производительности систем мониторинга на платформе Microsoft SCO...Тестирование производительности систем мониторинга на платформе Microsoft SCO...
Тестирование производительности систем мониторинга на платформе Microsoft SCO...
 
Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)
Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)
Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)
 
ECP и API управления процессами. InterSystems Meetup Sankt-Peterburg 2014
ECP и API управления процессами. InterSystems Meetup Sankt-Peterburg 2014ECP и API управления процессами. InterSystems Meetup Sankt-Peterburg 2014
ECP и API управления процессами. InterSystems Meetup Sankt-Peterburg 2014
 
High Load 2009 Dimaa Rus Ready
High Load 2009 Dimaa Rus ReadyHigh Load 2009 Dimaa Rus Ready
High Load 2009 Dimaa Rus Ready
 
CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...
CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...
CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...
 
Kubasov 1 7_deploy
Kubasov 1 7_deployKubasov 1 7_deploy
Kubasov 1 7_deploy
 
Управление услугами с помощью NETCONF/YANG и оркестратора Cisco NSO
Управление услугами с помощью NETCONF/YANG и оркестратора Cisco NSOУправление услугами с помощью NETCONF/YANG и оркестратора Cisco NSO
Управление услугами с помощью NETCONF/YANG и оркестратора Cisco NSO
 
Всеволод Поляков "История одного мониторинга"
Всеволод Поляков "История одного мониторинга"Всеволод Поляков "История одного мониторинга"
Всеволод Поляков "История одного мониторинга"
 
GRANIT — Global Russian Advanced Network Initiative
GRANIT — Global Russian Advanced Network InitiativeGRANIT — Global Russian Advanced Network Initiative
GRANIT — Global Russian Advanced Network Initiative
 
Поиск наоборот: материализуем результаты поиска / Николай Сивко (okmeter.io)
Поиск наоборот: материализуем результаты поиска / Николай Сивко (okmeter.io)Поиск наоборот: материализуем результаты поиска / Николай Сивко (okmeter.io)
Поиск наоборот: материализуем результаты поиска / Николай Сивко (okmeter.io)
 
Поиск наизнанку
Поиск наизнанкуПоиск наизнанку
Поиск наизнанку
 
Андрей Зайчиков "Архитектура распределенных кластеров NoSQL на AWS"
Андрей Зайчиков "Архитектура распределенных кластеров NoSQL на AWS"Андрей Зайчиков "Архитектура распределенных кластеров NoSQL на AWS"
Андрей Зайчиков "Архитектура распределенных кластеров NoSQL на AWS"
 
PUG #9 at OWOX: Поиск узких мест в приложении на PHP
PUG #9 at OWOX: Поиск узких мест в приложении на PHP                PUG #9 at OWOX: Поиск узких мест в приложении на PHP
PUG #9 at OWOX: Поиск узких мест в приложении на PHP
 

Plus de 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
 

Plus de 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...
 

Доменно специфичные базы данных и рассылка Aviasales, Борис Каплуновский (Aviasales)

  • 1. Доменно специфичные базы данных и рассылка @aviasales Каплуновский Борис
  • 2. Agenda ● Что делает aviasales ● Что делает рассылка aviasales ● Зачем нам Domain Specific Database ● Детали реализации фильтрующего дерева ● Ограничения решения ● Масштабирование решения
  • 4. Фильтры рассылки Предпочитаемые авиакомпании Пункты вылета/назначения Стоимость билетов Даты вылета/прилёта Страна назначения Месяца вылета/прилёта Длительность прибывания Количество пересадок Номера рейсов Аэропорты пересадок
  • 5. Движок рассылки должен ● 1 000 000 раз в сутки ● Проверить 1mb документ ● На соответствие ~1 000 000 предикатам И не вспотеть!
  • 6. Структура документа Результаты поиска Курсы Валют Информация о OTA Информация о Аэропортах Предложения Предложение Цена OTA 1 Цена OTA 2 Сегмент 1 Перелёт 1 HKT HKG Перелёт 1 HKG DME Сегмент 2 Перелёт 1 DME BKK Перелёт 1 BKK HKT
  • 7. Структура подписок orig='MOW' and dest='HKT' and price<40000 orig='MOW' and dest_country='US' and price<60000 orig='LED' and switch_count<2 and price<2000 orig='LED' and 'CDG' in switch_airports И подобных выражений сотни тысяч...
  • 8. Требования к базе данных ● Проверка на соответствие документа всем предикатам за <50ms ● Низкое потребление ресурсов ● Простота интеграции ● Расширяемость ● Масштабируемость
  • 9. Почему не подходит SQL ● Неоднородные наборы предикатов ● Нетипичные для SQL входные данные – огромное дерево ● Инверсия логики: ● В SQL хранят данные и выбирают данные соответствующие предикатам запроса ● Для рассылки в базе надо хранить предикаты и проверять соответсвие пришедших данных предикатам
  • 10. Ловушки: Протокол взаимодействия ● Программисты любят придумывать новые протоколы mysql/postgres/redis/memcached ● Изобретение протокола - трата времени ● Протоколы на все случаи уже изобретены
  • 11. Протокол взаимодействия HTTP ● Не надо писать клиент и сервер ● Удобно дебажить и тестировать ● Проксируется балансируется кешируется ● Существуют реализации для всего
  • 12. Ловушка: низкоуровневый язык ● Реализация на Java/C/Go/Erlang чтобы быстро работало! ● Скорость - следствие хороших алгоритмов, а не языка ● Низкоуровневые языки громоздки ● Их сложно отлаживать
  • 13. Язык реализации Python ( ) ● Можно быстро написать прототип и проверить эффективность алгоритмов ● Много сторонних библиотек ● Компактный и читаемый код
  • 14. Ловушка: одно решение для всего ● Программисты любят разрабатывать комбайны решающие все проблемы на земле ● Потеря фокуса ● Сложно заставить комбайн решать все задачи одинаково хорошо ● Создание комбайнов ВСЕГДА приводит к долгострою
  • 15. Структура подписки orig='MOW' and dest='HKT' and price<4000 Дизьюнкт Свойство документа Константа Булевый оператор
  • 16. Структура подписки orig='MOW' and dest='HKT' and price<4000 ● У свойств документа разная сложность вычисления ● Оператор = проще операторов <,> ● Порядок вычисления дизьюнктов не оказывает влияния на результат
  • 17. Структура подписки if (dest='HKT')then if(orig='MOW') then if(price<4000) match ● Свойства документа вычисляются лениво ● Пытаемся как можно раньше отсеять как можно больше поддеревьев ● Переупорядочивание дизьюнктов позволяет экономить ресурсы
  • 18. Приоритеты операций Дешевле проверка выше приоритет = < > Больше урезается дерево выше приоритет ORIGIN, DATE Проще расчитывается значение свойства выше приорит ORIGIN, PRICE
  • 19. свойства + предикаты = узлы дерева ЦЕНА < 10000 15000 15500 15700 Свойства Оператор ВРЕМЯ ПЕРЕСАДКИ > 80мин 95мин 110мин 200мин Константы
  • 20. Устройство дерева node op – string “” property – string “” children – hash {} sorted_keys - array []
  • 21. Устройство дерева leaf parent - * callback_url – string “”
  • 22. Дерево поиска orig = MOW LED HKT HKT BKK
  • 23. Дерево поиска price < 10000 20000 30000 40000 22000
  • 24. Фильтрующие свойства Количество пересадок < 0 1 2 3 Результаты поиска Курсы Валют Информация о OTA Информация о Аэропортах Предложения 1 Пересадка 3 Пересадки 0 Пересадок
  • 25. Фильтрующие свойства Количество пересадок < 0 1 2 3 Результаты поиска Курсы Валют Информация о OTA Информация о Аэропортах Предложения 1 Пересадка 3 Пересадки 0 Пересадок
  • 26. Небольшие уловки ● Все подписки имеют ссылку на родителя для ускорения операции удаления ● Рядом с деревом хранится сортированный массив сслылок на все листья дерева для ускорения операции удаления из дерева ● Результат вычисления свойств документа кешируется
  • 27. Как выглядит система в сборе TRF fast in-memory DSD RailsApp subscription interface RailsApp mail composer & sender SMTP Server MySQL
  • 28. Масштабирование по кличеству обрабатываемых документов ● Правила вставляются в оба дерева ● Обрабатываемый документ отправляется в одно из деревьев Rules Documents Tree1 Tree2
  • 29. Масштабирование по кличеству предикатов в дереве Rules Documents Tree1 Tree2 ● Правила вставляются в одно из деревьев ● Обрабатываемый документ отправляется в оба дерева
  • 30. Ограничения решения ● Алгоритм становится неэффективным если один документ подходит для значительной части дерева ● Дерево хранит данные в памяти, сохранность данных обеспечивается внешними средствами ● Для добавления новых свойств документа нужен перезапуск дерева
  • 31. Что получилось: технологии ● Два процесса ● Два ядра CPU ● 1.5gb Памяти ● 1 000 000 документов в сутки ● 150K Писем в день ● Время ответа базы в среднем 28ms
  • 32. Что получилось: бизнес ● Продукт был запущен через два месяца после начала разработки ● Проект окупился в течении двух месяцев после запуска ● Технология открыла дорогу новым фичам продукта