Пул соединений: то их слишком много, то ни одного
Как распознать и устранить три типа отказов базы данных по поведению приложения и настройкам соединений
NULL в SQL: почему условие возвращает не все строки
Как избежать потери данных при фильтрации и сравнениях из-за особенностей обработки NULL в SQL
Нормализация: до какой степени и когда отступать
Как избежать дублирования данных и упростить обновление информации в базе с помощью нормализации
ORM или запросы руками: где проходит граница
Как избежать типичных ошибок ORM и когда лучше отказаться от неё в пользу SQL
Постраничная выдача: смещение против курсора
Как избежать проблем с пагинацией и ускорить запросы к большим наборам данных
Инвалидация кеша: почему это трудно и что делать
Как выбрать стратегию инвалидации кеша и избежать типичных ошибок при балансе скорости и актуальности данных
UUID или автоинкремент: чем платят за каждый
Как выбрать первичный ключ для базы данных и избежать проблем с производительностью и масштабированием
Уровни изоляции: что выбрать и чем за это платят
Как уровни изоляции транзакций защищают данные и почему выбор между скоростью и корректностью критичен для приложений
Индексы в базе: какие ставить и когда они не спасают
Как индексы ускоряют запросы и почему иногда не работают несмотря на все усилия
Postgres или документная база: как выбрать и не переехать дважды
Как выбрать между гибкостью схемы в коде и надёжностью реляционной модели для ваших данных
Миграции базы без простоя: порядок, который работает
Как сделать так, чтобы приложение работало с базой во время любых изменений схемы
JSON как контракт: где он подводит
Формат, который читается без описания, обычно и передают без описания. Что записать отдельно от кода, чтобы обмен пережил расхождение версий.
Поиск по своим данным: когда нужен отдельный движок
Отдельный движок окупается, когда поиск — основной способ добраться до данных. Модель расчёта в часах, куда подставляются свои значения.
Соединения таблиц: почему строк больше, чем ожидали
Число строк результата определяется кратностью связи, а не таблицами. Одна проверка до запроса ловит почти все завышенные суммы в отчётах.
Слой трансформаций: движок в процессе против конвейера
Почему вычисление переезжает внутрь процесса и где эта схема ломается
Медленный запрос в PostgreSQL: с чего начинать
Порядок действий, который дешевле наугад повешенного индекса: статистика, план выполнения, условие — и только потом индекс.
Контракты данных: как перестать чинить отчёты
Чем настоящий контракт данных отличается от страницы в вики, из каких четырёх частей состоит и с какого отчёта начинать внедрение
Lakehouse без хайпа: что реально поменялось
Разбираем, чем плоха связка озера и склада, почему внешние таблицы не спасают, как лейкхаус даёт транзакции поверх открытых файлов и во что это обходится
Схема поехала: пять способов узнать об этом первым
Почему дрейф схемы первым замечает потребитель, почему процессные договорённости и красные джобы его пропускают и как устроены пять автоматических проверок на пути данных
Что компании знают о вас и зачем им это
Как без микрофона лента угадывает ваши желания: что сервисы записывают о каждом шаге и как из этих строчек складывается портрет человека
Стоимость хранения: три сценария на 100 ТБ
Почему нельзя просто умножить цену за терабайт на сто и как собрать модель из пяти слоёв, чтобы честно сравнить свои диски, выделенный сервер и облако