Боровиков Кирилл @Kilor
Архитектура ИС: PostgreSQL, Node.js и highload
- Badges
- Habred
- Oldtimer
- Tech Author 2022
- Invited
- by invitation from UFO
- About
- Мониторим и оптимизируем запросы PostgreSQL оптом и в розницу.
Строим сложные системы для бизнеса. Придумываем алгоритмы и реализуем в коде.
Нетривиальные подходы к решению тривиальных задач.
Дайджест:
— «Ленивый сахар» PostgreSQL
— Чего «энтерпрайзу» в PostgreSQL не хватает
— Энтерпрайз-домино. 0x13 вредных советов для ниндзя-разработчика
— PostgreSQL в «Тензоре» — публикации за год (#4)
— PostgreSQL в «Тензоре» — публикации за год (#3)
— PostgreSQL в «Тензоре» — публикации за год (#2)
— PostgreSQL в «Тензоре» — публикации за год
Курс «PostgreSQL для начинающих»:
— 1. Основы SQL
— 2. Простые SELECT
— 3. Сложные SELECT
— 4. Анализ запросов
— 4.1. — как и зачем читать планы
— 4.2. — узлы получения данных
Микропостинг:
— Пустой параметр-массив и расширенный navbar
— Бесполезный CASE #2
— Бесполезный CASE
— Превращаем DECIMAL в inet
— IS [NOT] NULL и OR/AND-комбинации
— concat_ws
Анализ запросов в PostgreSQL:
— PostgreSQL, что в логе твоем?
— Self-hosted EXPLAIN: наглядно и безопасно
— «Импортозамещаем» анализ планов PostgreSQL
— Кластеризуем миллионы планов PostgreSQL
— Анализируем «слона» вместе с коллегами
— One Tool to Analyze Them All
— Анализируем «слона» по частям
— PostgreSQL Query Profiler: как сопоставить план и запрос
— Правильно [c]читаем параллельные планы PostgreSQL
— Вооруженным глазом: наглядно о проблемах PostgreSQL-запроса
— Понимаем планы PostgreSQL-запросов еще удобнее
— Рецепты для хворающих SQL-запросов (видео)
— Массовая оптимизация запросов PostgreSQL (видео)
— О чем молчит EXPLAIN, и как его разговорить
PostgreSQL Antipatterns и оптимизация SQL:
— «вращаем» JSON
— валим «слона» — highload на ровном месте
— устраняем вложенные интервалы
— бьемся с индексацией парных неравенств в планах
— ходим по JSON-граблям
— Всегда ли хорош Index Only Scan?
— Индиана Джонс и максимальное значение ключа, или В поисках «последних» записей
— простой(?) INSERT… VALUES
— где скаляру в GiST место?
— куда крутить NULLS
— когда мешает внешний ключ
— в этом плане кто-то лишний
— рекурсивные грабли на ровном месте, или Сказка о потерянном времени
— делаем группировку быстрее от 0.1 до 5 раз
— «где-то я тебя уже видел...»
— «слишком много золота»
— борем deadlock при пакетном UPDATE
— скованные одной цепью EXISTS
— DBA-детектив, или Три дела о потерянной производительности
— работаем с отрезками в «кровавом энтерпрайзе»
— убираем медленные и ненужные сортировки
— «Бесконечность — не предел!», или Немного о рекурсии
— уникальные идентификаторы
— «Должен остаться только один!»
— SELF JOIN vs WINDOW
— накручиваем себе проблемы
— насколько глубока кроличья нора? пробежимся по иерархии
— навигация по реестру
— вычисление условий в SQL
— сражаемся с ордами «мертвецов»
— сказ об итеративной доработке поиска по названию
— меняем данные в обход триггера
— ударим словарем по тяжелому JOIN
— редкая запись долетит до середины JOIN
— обновляем большую таблицу под нагрузкой
— передача наборов и выборок в SQL
— сизифов JOIN массивов
— статистика всему голова
— вредные JOIN и OR
— CTE x CTE
SQL HowTo:
— Black and White (Puzzle Hunt 2010)
— загадка Эйнштейна, или снова Джиндош
— один индекс на два диапазона
— итоги по строкам и столбцам «в одно действие»
— TOP-N на субинтервалах
— ближайший общий предок в дереве (LCA)
— замена в строке по набору
— крупицы золота в реестре
— наперегонки со временем
— обход дерева иерархии «по курсору» через двойную рекурсию
— разные варианты работы с EAV
— «простое» прогнозирование
— считаем «уников» на интервале
— генерируем лабиринты (алгоритм Прима и геометрические типы)
— делаем из мухи слона (алгоритм Ли)
— три WHERE в одном запросе
— решаем головоломку «Небоскрёбы» почти без перебора
— рейтинг-за-интервал
— префиксный FTS-поиск с релевантностью по дате
— ломаем мозг об дерево — упорядочиваем иерархию с рекурсией и без
— PostgreSQL 13: happy pagination WITH TIES
— курсорный пейджинг с неподходящей сортировкой
— красивые отчеты по «дырявым» данным — GROUPING SETS
— 1000 и один способ агрегации
— пишем while-цикл прямо в запросе, или «Элементарная трехходовка»
— собираем «цепочки» с помощью window functions
— рисуем морозные узоры на SQL
DBA:
— хранение списков — таблица, массив, строка?
— Псс, парень… индекс нужен?
— реверс-инжинирим структуру БД PostgreSQL по плану запроса к ней
— прибираем «мертвые души»
— меняем «слонов» на переправе
— когда почти закончился serial
— «Кто-то слишком много ест!»
— Ночной Дозор
— кто скрывается за блокировкой
— в погоне за пролетающими блокировками
— мониторинг базы PostgreSQL — кто виноват, и что делать
— грамотно организовываем синхронизации и импорты
— находим бесполезные индексы
— перенос значений SEQUENCE между базами PostgreSQL
— когда пасует VACUUM — чистим таблицу вручную
— вычищаем клон-записи из таблицы без PK
Решения для PostgreSQL/SQL
— КЛАДРируем адреса произвольной формы (ч.2 — подстрочный поиск)
— КЛАДРируем адреса произвольной формы (ч.1 — импорт)
— Множественные источники данных в интерфейсе — client-side «SQL»
— Случайности не случайны
— Агрегаты в БД — прокси-таблицы
— Агрегаты в БД — многомерные суперагрегаты
— Агрегаты в БД — эффективная обработка потока «фактов»
— Агрегаты в БД — зачем, как, а стоит ли?
— Телепортация тонн данных в PostgreSQL
— У меня зазвонил телефон. Кто говорит?.. Поможет «слон»
— Классифицируем ошибки из PostgreSQL-логов
— Как мы в СБИС автоматический расчет себестоимости делали (видео)
— Экономим копеечку на больших объемах в PostgreSQL
— Пишем в PostgreSQL на субсветовой: 1 host, 1 day, 1TB
— Фантастические advisory locks, и где они обитают
— PubSub почти бесплатно: особенности NOTIFY в PostgreSQL
— БД мессенджера (ч.2): секционируем «наживую»
— БД мессенджера (ч.1): проектируем каркас базы
Решения для NodeJS
— Кэш в JavaScript: не все Map'ы одинаково полезны
— Клонирование ключей. Is eval() evil?
— Приручаем многопоточность в Node.js (часть 5: автомасштабирование под нагрузку)
— Приручаем многопоточность в Node.js (часть 4: координатор против синхронного кода)
— Приручаем многопоточность в Node.js (часть 3: разделяемая память, атомарные операции и блокировки)
— Приручаем многопоточность в Node.js (часть 2: очередь, каналы и координатор)
— Приручаем многопоточность в Node.js (часть 1: базовые концепты)
— Эффективная FIFO-обработка для Node.js и Chrome
— Разгоняем JS-парсер с помощью WebAssembly (часть 3: SIMD)
— Разгоняем JS-парсер с помощью WebAssembly (часть 2: алгоритм и его оптимизации)
— Разгоняем JS-парсер с помощью WebAssembly (часть 1: базовые возможности)
— Мониторинг многопоточных приложений Node.JS
— Первый парсер на деревне
— Immutable Trie: найди то, не знаю что, но быстро, и не мусори
— Динамическая балансировка нагрузки в pull-схеме
— Хеш+кэш: оптимизация «потоковой» обработки
— Большие аппетиты маленьких Buffer в Node.js
— Микропост: режем UNICODE-строки для PostgreSQL
- Belongs to hubs
- Subscribed to companies
- ТензорРазработчик системы СБИС
Information
- Rating
- 121-st
- Location
- Ярославль, Ярославская обл., Россия
- Works in
- Date of birth
- Registered
- Activity