PostgreSQL: практические примеры оптимизации SQL-запросов / Иван Фролков (Po...Ontico
Довольно часто как адинистраторы, так и разработчики жалуются на низкую производительность приложений, работающих с базой данных, и нередко при этом ищут решения возникших проблем с помощью различных настроек как СУБД, так и операционной системы, пренебрегая при этом самым действенным способом - оптимизацией запросов к собственно БД.
Тому, как понимать, где же узкие места, и как их можно попробовать избежать на примере PostgreSQL и посвящен этот доклад.
Долгожданный релиз pg_pathman 1.0 / Александр Коротков, Дмитрий Иванов (Post...Ontico
Механизм секционирования в Postgres имеет ряд ограничений, которые не позволяют использовать концепцию секционирования в полной мере. Среди таких ограничений можно выделить неэффективность планирования запросов для секционированных таблиц (линейный рост времени планирования при увеличении количества секций), отсутствие HASH-секционирования, необходимость ручного управления секциями.
В нашем докладе мы расскажем про расширение pg_pathman, которое позволяет обойти эти ограничения. pg_pathman реализует RANGE и HASH секционирования с логарифмическим и константным временами планирования соответственно. В pg_pathman поддерживается определение секции на этапе выполнения, конкурентное секционирование.
pg_pathman долго находился в стадии beta-тестирования, но теперь мы рады, наконец, сообщить о релизе 1.0. В докладе мы расскажем как про детали внутреннего устройства, так и про приёмы практического использования.
PostgreSQL: практические примеры оптимизации SQL-запросов / Иван Фролков (Po...Ontico
Довольно часто как адинистраторы, так и разработчики жалуются на низкую производительность приложений, работающих с базой данных, и нередко при этом ищут решения возникших проблем с помощью различных настроек как СУБД, так и операционной системы, пренебрегая при этом самым действенным способом - оптимизацией запросов к собственно БД.
Тому, как понимать, где же узкие места, и как их можно попробовать избежать на примере PostgreSQL и посвящен этот доклад.
Долгожданный релиз pg_pathman 1.0 / Александр Коротков, Дмитрий Иванов (Post...Ontico
Механизм секционирования в Postgres имеет ряд ограничений, которые не позволяют использовать концепцию секционирования в полной мере. Среди таких ограничений можно выделить неэффективность планирования запросов для секционированных таблиц (линейный рост времени планирования при увеличении количества секций), отсутствие HASH-секционирования, необходимость ручного управления секциями.
В нашем докладе мы расскажем про расширение pg_pathman, которое позволяет обойти эти ограничения. pg_pathman реализует RANGE и HASH секционирования с логарифмическим и константным временами планирования соответственно. В pg_pathman поддерживается определение секции на этапе выполнения, конкурентное секционирование.
pg_pathman долго находился в стадии beta-тестирования, но теперь мы рады, наконец, сообщить о релизе 1.0. В докладе мы расскажем как про детали внутреннего устройства, так и про приёмы практического использования.
Доклад Антона Поварова на Tarantool Meetup. "Tarantool в Badoo: хранение исто...Badoo Development
Каждый день на badoo.com пользователи просматривают порядка 100 миллионов профилей других юзеров. Мы храним счетчики и полную историю посещений за последние 90 дней, с некоторой агрегацией - это около 5 миллиардов ивентов. Система обрабатывающая этот поток данных создана давно и пережила несколько инкарнаций, становясь все ближе к базе данных.
В какой-то момент мы решили перестать изобретать велосипед, отказались от демонов на C+sqlite, не стали делать на mysql-ях, редисах и мемкешах, а взяли и запилили на Tarantool.
Рассказываем почему Tarantool, как шардим, реплицируем (все просто) и как плавно это дело внедрили на живой системе без downtime.
Разработка real-time приложений с RethinkDB / Илья Вербицкий (Независимый кон...Ontico
RethinkDB - это распределенное документо-ориентированное хранилище данных с открытым исходным кодом. Данная система ориентирована на разработку систем обработки данных реального времени, позволяя клиентскому приложению подписываться на изменение тех или иных данных.
В данном докладе я бы хотел осветить не только вопросы разработки приложений на базе RethinkDB, но и поговорить о том, как все это работает. Мы поговорим о ReQL (язык запросов), “changefeeds”, индексах, шардинге, репликациях, а также затронем вопросы особенностей проектирования баз данных под данную платформу.
Эффективные алгоритмы поиска подобных объектов для терабайтов данных / Евгени...Ontico
Segmento DMP хранит сотни миллионов анонимных профилей пользователей интернета. Часть из задач отдела Data Science связана с их кластеризацией и поиском нечетких дубликатов. Для успешного решения этих задач необходимо вычислить метрики сходства между профилями. Brute force подход на таких объемах данных уже не сработает, поэтому мы выбрали другой путь.
Тезисы - http://www.highload.ru/2015/abstracts/1862.html
Зачем обычному программисту знать языки, на которых почти никто не пишет. Але...yaevents
Алексей Воинов, Яндекс
Закончил МГТУ им. Н.Э.Баумана в 1998 году. Посвятил часть своей жизни свободному программному обеспечению. Замечен в любви к языкам, как к алгоритмическим, так и к человеческим, как к естественным, так и к искусственным. Работает в Яндексе с 2009 года, занимается разработкой Яндекс.Почты.
Тема доклада
Зачем обычному программисту знать языки, на которых почти никто не пишет.
Тезисы
Есть категория алгоритмических языков, которые большинство программистов считает в лучшем случае странными. Это такие языки как Haskell, *ML, Lisp, Q. «Странные» языки не приживаются в промышленной разработке софта, потому что они не дают возможности писать стандартный «промышленный» код. Однако они бывают очень хороши для придумывания приёмов, которые помогают улучшить промышленный код. Впоследствии многие из них становятся стандартными промышленными. Знание «странных» языков очень полезно, когда в силу внешних обстоятельств сделать промышленный код радикально лучше невозможно, но его можно улучшать небольшими шагами.
Производительность запросов в PostgreSQL - шаг за шагом / Илья Космодемьянски...Ontico
Вы взяли ваш любимый фреймворк™ и быстро запустили крутой проект, который раскручивается, приносит деньги и требует быстрого развития, чтобы оставить конкурентов далеко позади.
В один далеко не прекрасный момент вы понимаете, что корень всех зол - медленное время ответа базы данных, а ваш админ зло смотрит на разработчиков красными от бессонницы глазами и ругается на безумные запросы, которые генерирует ORM. Тот самый ORM, который позволил вам так быстро запустить ваш замечательный проект.
Знакомо? Тогда вам будет интересно послушать, как заставить вашу базу данных работать прямо сейчас. А именно:
- какое место в общей производительности базы данных занимает оптимизация запросов?
- когда прекращать “крутить гайки” и заниматься медленными запросами?
- что такое медленный запрос и когда их надо начинать оптимизировать?
- как оптимизировать?
- EXPLAIN, EXPLAIN ANALYZE - как читать и на что обращать внимание?
- как работает оптимизатор запросов PostgreSQL и где могут быть узкие места?
- для чего нужны и для чего не нужны индексы, методики индексирования, и как быть уверенным, что ваш индекс правильно используется?
- какие запросы не будут работать быстро никогда, и как с этим жить?
- ошибается ли оптимизатор и, если да, то почему и как его в таком случае призвать к порядку?
Fantastic caches and where to find themAlexey Tokar
"Magical caches are terrorizing engineers. When engineers are afraid, they debug. Contain this, or it’ll mean refactoring." (c)
The story of how an internal Hibernate cache can consume 99% of 30GiB of your application memory with just the addition of a single line of code. The way it was discovered and root cause analysis to prevent it in the future will be the topic of the talk.
The talk is about a real experience of organization transformation with 15 years old legacy monolith project into DevOps oriented, microservice-based modern company. On our way, we have grown from 40 to 80 engineers for the last two years. We have x20 increased delivery of the old main project and implemented CD for projects and processes.
The talk is about a possibility of creation non-static code analyzer which will point a dev team to some unobvious bugs in the system based on machine learning technics.
We will become acquainted with Weka — the machine learning tool for exploratory development of the algorithm, also, we will take a closer look on basic algorithms for classification: Decision Trees, SVM and Naive Bayes classifier.
Real life examples will show you how the development life cycle can be improved with AI technics
One of the most boring thing in software development in large companies is following a bureaucracy. Tons of developers were melted down by that ruthless machine with its not always obvious rules. That’s why we decided to delegate all the boring work to machines instead of humans and the talk will cover the achieved results.
Bug prediction based on your code historyAlexey Tokar
The talk is about a possibility of creation non-static code analyzer which will point a dev team to some unobvious bugs in the system based on machine learning technics.
We will become acquainted with Weka — the machine learning tool for exploratory development of the algorithm, also, we will take a closer look on basic algorithms for classification: Decision Trees, SVM and Naive Bayes classifier.
Real life examples will show you how the development life cycle can be improved with AI technics.
The talk will cover details of implementing modern API design for web-services. You will find differences in two main approaches: API Gateway for every single client and common API which tends to serve any client. Best practices from the world of REST API designing including but not limited to HATEoAS
Доклад Антона Поварова на Tarantool Meetup. "Tarantool в Badoo: хранение исто...Badoo Development
Каждый день на badoo.com пользователи просматривают порядка 100 миллионов профилей других юзеров. Мы храним счетчики и полную историю посещений за последние 90 дней, с некоторой агрегацией - это около 5 миллиардов ивентов. Система обрабатывающая этот поток данных создана давно и пережила несколько инкарнаций, становясь все ближе к базе данных.
В какой-то момент мы решили перестать изобретать велосипед, отказались от демонов на C+sqlite, не стали делать на mysql-ях, редисах и мемкешах, а взяли и запилили на Tarantool.
Рассказываем почему Tarantool, как шардим, реплицируем (все просто) и как плавно это дело внедрили на живой системе без downtime.
Разработка real-time приложений с RethinkDB / Илья Вербицкий (Независимый кон...Ontico
RethinkDB - это распределенное документо-ориентированное хранилище данных с открытым исходным кодом. Данная система ориентирована на разработку систем обработки данных реального времени, позволяя клиентскому приложению подписываться на изменение тех или иных данных.
В данном докладе я бы хотел осветить не только вопросы разработки приложений на базе RethinkDB, но и поговорить о том, как все это работает. Мы поговорим о ReQL (язык запросов), “changefeeds”, индексах, шардинге, репликациях, а также затронем вопросы особенностей проектирования баз данных под данную платформу.
Эффективные алгоритмы поиска подобных объектов для терабайтов данных / Евгени...Ontico
Segmento DMP хранит сотни миллионов анонимных профилей пользователей интернета. Часть из задач отдела Data Science связана с их кластеризацией и поиском нечетких дубликатов. Для успешного решения этих задач необходимо вычислить метрики сходства между профилями. Brute force подход на таких объемах данных уже не сработает, поэтому мы выбрали другой путь.
Тезисы - http://www.highload.ru/2015/abstracts/1862.html
Зачем обычному программисту знать языки, на которых почти никто не пишет. Але...yaevents
Алексей Воинов, Яндекс
Закончил МГТУ им. Н.Э.Баумана в 1998 году. Посвятил часть своей жизни свободному программному обеспечению. Замечен в любви к языкам, как к алгоритмическим, так и к человеческим, как к естественным, так и к искусственным. Работает в Яндексе с 2009 года, занимается разработкой Яндекс.Почты.
Тема доклада
Зачем обычному программисту знать языки, на которых почти никто не пишет.
Тезисы
Есть категория алгоритмических языков, которые большинство программистов считает в лучшем случае странными. Это такие языки как Haskell, *ML, Lisp, Q. «Странные» языки не приживаются в промышленной разработке софта, потому что они не дают возможности писать стандартный «промышленный» код. Однако они бывают очень хороши для придумывания приёмов, которые помогают улучшить промышленный код. Впоследствии многие из них становятся стандартными промышленными. Знание «странных» языков очень полезно, когда в силу внешних обстоятельств сделать промышленный код радикально лучше невозможно, но его можно улучшать небольшими шагами.
Производительность запросов в PostgreSQL - шаг за шагом / Илья Космодемьянски...Ontico
Вы взяли ваш любимый фреймворк™ и быстро запустили крутой проект, который раскручивается, приносит деньги и требует быстрого развития, чтобы оставить конкурентов далеко позади.
В один далеко не прекрасный момент вы понимаете, что корень всех зол - медленное время ответа базы данных, а ваш админ зло смотрит на разработчиков красными от бессонницы глазами и ругается на безумные запросы, которые генерирует ORM. Тот самый ORM, который позволил вам так быстро запустить ваш замечательный проект.
Знакомо? Тогда вам будет интересно послушать, как заставить вашу базу данных работать прямо сейчас. А именно:
- какое место в общей производительности базы данных занимает оптимизация запросов?
- когда прекращать “крутить гайки” и заниматься медленными запросами?
- что такое медленный запрос и когда их надо начинать оптимизировать?
- как оптимизировать?
- EXPLAIN, EXPLAIN ANALYZE - как читать и на что обращать внимание?
- как работает оптимизатор запросов PostgreSQL и где могут быть узкие места?
- для чего нужны и для чего не нужны индексы, методики индексирования, и как быть уверенным, что ваш индекс правильно используется?
- какие запросы не будут работать быстро никогда, и как с этим жить?
- ошибается ли оптимизатор и, если да, то почему и как его в таком случае призвать к порядку?
Fantastic caches and where to find themAlexey Tokar
"Magical caches are terrorizing engineers. When engineers are afraid, they debug. Contain this, or it’ll mean refactoring." (c)
The story of how an internal Hibernate cache can consume 99% of 30GiB of your application memory with just the addition of a single line of code. The way it was discovered and root cause analysis to prevent it in the future will be the topic of the talk.
The talk is about a real experience of organization transformation with 15 years old legacy monolith project into DevOps oriented, microservice-based modern company. On our way, we have grown from 40 to 80 engineers for the last two years. We have x20 increased delivery of the old main project and implemented CD for projects and processes.
The talk is about a possibility of creation non-static code analyzer which will point a dev team to some unobvious bugs in the system based on machine learning technics.
We will become acquainted with Weka — the machine learning tool for exploratory development of the algorithm, also, we will take a closer look on basic algorithms for classification: Decision Trees, SVM and Naive Bayes classifier.
Real life examples will show you how the development life cycle can be improved with AI technics
One of the most boring thing in software development in large companies is following a bureaucracy. Tons of developers were melted down by that ruthless machine with its not always obvious rules. That’s why we decided to delegate all the boring work to machines instead of humans and the talk will cover the achieved results.
Bug prediction based on your code historyAlexey Tokar
The talk is about a possibility of creation non-static code analyzer which will point a dev team to some unobvious bugs in the system based on machine learning technics.
We will become acquainted with Weka — the machine learning tool for exploratory development of the algorithm, also, we will take a closer look on basic algorithms for classification: Decision Trees, SVM and Naive Bayes classifier.
Real life examples will show you how the development life cycle can be improved with AI technics.
The talk will cover details of implementing modern API design for web-services. You will find differences in two main approaches: API Gateway for every single client and common API which tends to serve any client. Best practices from the world of REST API designing including but not limited to HATEoAS
5. 5
Способы тестирования
MacBook Air (13-inch, Mid 2012)
1.8 GHz Intel Core i5
4 GB 1600 MHz DDR3
SSD
На чем ищем:
Где ищем:
700.000 фильмов
±3.000.000 названий
8. 8
Hash based
• быстрый поиск O(1)
• мало памяти O(n)
• простая реализация
П К
• поиск только по полному совпадению
9. 9
Префиксное дерево (radix trie)
м
е
с
т
о
встречисына
ь в
илли
ампира
уду
яц в деревне
довый месяц
…
медовый месяц
месяц в деревне
месть вампира
месть вуду
месть вилли
место сына
место встречи
…
10. 10
Префиксное дерево (radix trie)
• мало памяти O(log(n*m))
• быстрый поиск O(k)
П К
• сложное решение
• возможны проблемы с размером словаря
• поиск только по началу строки
13. 13
Метрика Жаро-Винклера
dj =
1
3
m
| s1 |
+
m
| s2 |
+
m-t
m
æ
è
ç
ö
ø
÷
dw = dj +lp(1-dj )
de*=
max(| s1 |,| s2 |
2
ê
ëê
ú
ûú-1
s – длина слова
m – кол-во совпавших символов*
t – половина транспозиций
l – длина общего префикса
p – коэф. сглаживания
15. 15
Метрика Жаро-Винклера
Т Р А Н С Ф О Р М Е Р Ы
Т 1 0 0 0 0 0 - - - - - -
Р 0 1 0 0 0 0 0 - - - - -
А 0 0 1 0 0 0 0 0 - - - -
Н 0 0 0 1 0 0 0 0 0 - - -
С 0 0 0 0 1 0 0 0 0 0 - -
М 0 0 0 0 0 0 0 0 1 0 0 -
О 0 0 0 0 0 1 0 0 0 0 0
Р 0 0 0 0 0 1 0 0 0 0
Ф 0 0 1 0 0 0 0 0 0
Е 0 0 0 0 0 1 0 0
Р 0 0 0 0 0 1 0
Ы 0 0 0 0 0 1
s = 12
m = 12
t = 1
l = 5
p = 0.1
dj = 0.94
dw = 0.98
16. 16
Метрика Жаро-Винклера
• не требует дополнительной памяти
• поиск опечаток в любой позиции
П К
• медленная работа O(n)
17. 17
Поиск в глубину (DFS)
A
B C
D
C A C
B D D E F
ABCD
• abcd
• abcb (r)
• abd (i)
• accd (r)
• acce (r,r)
• accf (r,r)
• aca (i,r,r)
18. 18
Поиск в глубину (DFS)
• быстрый поиск простых инвариантов
• небольшое потребление памяти
• управляемая производительность
П К
• возможен рост сложности по экспоненте
• нужна сложная реализация
21. 21
N-граммы
• 2-граммы:
– больше возможных исправлений опечаток
– большой словарь и множество коллизий
• >3-граммы:
– небольшой размер словаря
– ограничение на минимальную длину слова
• 3-граммы:
– наилучший баланс точности и объема словаря
23. 23
Template hashing
1 0 1 0 0 0 1 1 1 1 0 0 0
A C E G I K M O Q S U W Y
B D F H J L N P R T V X Z
T R A N S F O R M E R S
24. 24
Template hashing
hash( “Transformers” ) = (1010001111000)2 = (5240)10
• runaway robber
• your name brown?
• your new baby
• warren zevon
• robert emmet
• terror on tape
• to beep or not to beep
• transformers
• a story of montana
• a year to remember
• esperanza
• story seas
523910 524010 524110
25. 25
Template hashing
• быстрый поиск простых опечаток
• маленький объем индекса
П К
• сокращает словарь всего до 20-25%%
производительность – как быстро мы можем найти приемлемые результаты
качество – какой объем выборки нам нужно переранжировать
можно улучшить до O(logN) используя бинарный поиск
Хеширование— преобразование по определённому алгоритму входного массива данных произвольной длины в выходную битовую строку фиксированной длины. Такие преобразования также называются хеш-функциями или функциями свёртки, а их результаты называют хешем
Хеш-табли́ца — это структура данных, реализующая интерфейс ассоциативного массива, а именно, она позволяет хранить пары (ключ, значение) и выполнять три операции: операцию добавления новой пары, операцию поиска и операцию удаления пары по ключу.
1ms поиск
74MiB словарь
PATRICIA
60MiB словарь
9ms поиск
Расстояние Левенштейна - мера разницы двух последовательностей символов (строк) относительно минимального количества операций вставки, удаления и замены, необходимых для перевода одной последовательности в другую.
транспозиция – символ в слове есть, но далее чем De
суть метрики?
описать кейсы похожестей на примере с транспозициями
1500мс поиск по всему словарю
Depth-first search
управляемая производительность:
можно искать пока есть на это время
можно искать, пока не исследовано достаточное кол-во опечаток
можно искать, пока не найдется необходимое кол-во предлагаемых вариантов
N-грамма — последовательность из n элементов. Последовательность из двух последовательных элементов часто называют биграмма, последовательность из трех элементов называется триграмма. Не менее четырех и выше элементов обозначаются как N-грамма, N заменяется на количество последовательных элементов.
Инвертированный индекс (англ. inverted index) — структура данных, в которой для каждого слова коллекции документов в соответствующем списке перечислены все документы в коллекции, в которых оно встретилось. Инвертированный индекс используется для поиска по текстам.
описать как считаем улчшие вариант. Считаем кол-во вхождений слов в н-граммы
строим инвертированный индекс
ранжируем документы
с этой задачей хорошо справляется map-reduce
- если опечатка на стыке н-граммы, то найти ее будет невозможно. Либо, если опечатка попала во все наборы нграмм
140мс – поиск по словарю
496MiB размер словаря
Хеширование по шаблону
основная идея – совместить алгоритмы и структуры данных так, чтобы за минимальное время максимально сократить словарь, а затем тонко отранжировать результаты