Базы данных
Разработка, инфраструктура, SEO, ИИ и IT для бизнеса — коротко и по делу.
70 статей
- Базы данных4 мин
Транзакции и ACID в базах данных простыми словами
Транзакция объединяет несколько операций с базой в единое целое «всё или ничего»; ACID означает, что она либо выполняется полностью, либо не выполняется вовсе (атомарность), сохраняет данные корректными (согласованность), не путается с параллельными транзакциями (изоляция) и переживает сбой после фиксации (долговечность).
Основы - Базы данных3 мин
Change Data Capture (CDC) и Debezium: как стримить изменения
CDC на основе журнала читает журнал транзакций базы и превращает каждую вставку, изменение и удаление в событие; Debezium делает это для PostgreSQL, MySQL и других СУБД и публикует события в Kafka, поэтому хранилище, поисковый индекс и кеш синхронизируются за секунды, а не после следующего пакетного запуска.
Продвинутое - Базы данных3 мин
Очистка данных: как подготовить данные к анализу
Очистка данных — это последовательность шагов: найти и убрать дубли, решить, что делать с пропусками, привести форматы к единому виду, пометить выбросы и задокументировать все правила, чтобы их можно было повторить.
Практика - Базы данных3 мин
Data Lake, Data Warehouse и Lakehouse: в чём разница
Data Warehouse хранит очищенные структурированные данные для отчётов, Data Lake — любые сырые данные дёшево и в исходном виде, а Lakehouse добавляет к озеру таблицы и транзакции как в хранилище. Небольшой компании часто хватает обычной базы и BI-инструмента.
Основы - Базы данных4 мин
Взаимные блокировки (deadlock) в БД: причины и решения
Deadlock возникает, когда две транзакции держат блокировки, нужные друг другу, и база принудительно откатывает одну из них; лечится это единым порядком захвата блокировок, короткими транзакциями и повтором откатившейся транзакции.
Продвинутое - Базы данных4 мин
Типичные ошибки проектирования баз данных и как их избежать
Большинство проблем с данными закладываются в схеме: храните одно значение в одной ячейке, задавайте ограничения на уровне БД, используйте numeric для денег, единые имена и timestamptz для времени.
Практика - Базы данных3 мин
Индексы в базе данных: как они ускоряют запросы
Индекс — отдельная отсортированная структура, обычно B-дерево, которая позволяет базе сразу перейти к нужным строкам вместо чтения всей таблицы; он ускоряет чтение, но замедляет каждую вставку, обновление и удаление, поэтому индексы создают под реальные запросы, а не на всякий случай.
Основы - Базы данных3 мин
Миграции базы данных: как безопасно менять схему
Меняйте схему только через пронумерованные миграции в репозитории, применяйте их автоматически при деплое и разбивайте опасные изменения на совместимые шаги, чтобы старый и новый код работали с базой одновременно.
Практика - Базы данных4 мин
Нормализация базы данных: 1НФ, 2НФ, 3НФ на примерах
Нормализация — это разбиение данных на таблицы так, чтобы каждый факт хранился один раз: 1НФ убирает списки в ячейках, 2НФ — колонки, зависящие от части составного ключа, 3НФ — колонки, зависящие от других неключевых колонок; денормализуйте только осознанно, ради измеренной скорости чтения или отчётов.
Основы - Базы данных4 мин
Как сделать полнотекстовый поиск на сайте с Elasticsearch
Создайте индекс с отдельными полями под каждый язык и правильными анализаторами, синхронизируйте его с основной базой через события или периодическую переиндексацию, а для опечаток и подсказок используйте fuzziness и search_as_you_type.
Практика - Базы данных4 мин
Анализаторы Elasticsearch для поиска на русском и узбекском
Индексируйте название товара дважды — русским анализатором (стемминг, синонимы) и анализатором транслитерации кириллицы в узбекскую латиницу — и ищите по обоим полям с fuzziness, тогда «non», «нон» и «nonn» найдут хлеб.
Практика - Базы данных3 мин
ETL и ELT: как работают конвейеры данных
ETL сначала преобразует данные, а потом загружает их в хранилище, ELT — сначала загружает сырые данные, а преобразует уже внутри хранилища. Для облачных DWH чаще выбирают ELT, потому что вычисления там дешёвые и масштабируемые.
Основы - Базы данных4 мин
Проблема N+1 запросов: как найти и исправить
N+1 — это когда код делает один запрос за списком и ещё по запросу на каждый элемент; исправляется загрузкой связанных данных заранее одним-двумя запросами через eager loading, JOIN или батчинг.
Практика - Базы данных4 мин
Как выбрать базу данных для своего проекта
Для большинства проектов начните с PostgreSQL как основной базы, а Redis, поисковый движок или документную базу добавляйте только под конкретную измеренную задачу.
Практика - Базы данных3 мин
Как импортировать CSV и Excel в PostgreSQL
Загружайте файл сначала во временную staging-таблицу с текстовыми колонками через COPY, \copy, DBeaver или Python, затем приводите типы, убирайте дубли и переносите проверенные данные в рабочую таблицу.
Практика - Базы данных4 мин
Как установить и настроить PostgreSQL на Ubuntu
Установите PostgreSQL из репозиториев Ubuntu через apt, создайте отдельную роль и базу для приложения, откройте удалённый доступ только для конкретных IP через listen_addresses и pg_hba.conf и подберите shared_buffers, work_mem и число соединений под память VPS.
Практика - Базы данных4 мин
Как построить дашборд с KPI для бизнеса
Начните с решений, которые должен поддерживать дашборд, выберите по несколько KPI на отдел, соберите данные из CRM, 1С и таблиц в одно хранилище с общими справочниками, а затем постройте экран «итоги — динамика — детали» с понятным расписанием обновления.
Практика - Базы данных4 мин
Проектирование базы данных для платежей и балансов: ledger
Записывайте каждое движение денег как неизменяемую транзакцию с проводками, сумма которых равна нулю, храните суммы целыми числами в тийинах, делайте колбэки провайдеров идемпотентными через уникальный ключ и блокируйте строку счёта перед списанием.
Продвинутое - Базы данных3 мин
Looker Studio: бесплатные дашборды из Google Sheets
Looker Studio бесплатно превращает Google Sheets, BigQuery и десятки других источников в интерактивные дашборды. Главное — аккуратная структура таблицы на входе и осознанные настройки доступа: чьи учётные данные использует источник и кто может скачивать данные.
Практика - Базы данных3 мин
Как настроить Metabase для бизнес-дашбордов
Запустите Metabase в Docker с отдельной PostgreSQL для служебных данных, подключите базу через пользователя только для чтения, соберите вопросы в дашборды, ограничьте доступ группами и настройте рассылку отчётов по расписанию.
Практика - Базы данных4 мин
Как перенести базу данных с MySQL на PostgreSQL
Миграция с MySQL на PostgreSQL — это не только перенос данных: сначала проверяются типы и SQL-запросы приложения, затем данные переносятся через pgloader на тестовый стенд, сверяются, и только после репетиции приложение переключается в короткое окно с планом отката.
Практика - Базы данных4 мин
Агрегации в MongoDB: $match, $group, $lookup на примерах
Aggregation pipeline — это цепочка стадий, где каждая обрабатывает результат предыдущей; фильтруйте через $match как можно раньше, группируйте через $group, а $lookup делайте уже на маленьком наборе данных.
Практика - Базы данных3 мин
Проектирование схемы в MongoDB: вложение или ссылки
Вкладывайте данные, которые читаются вместе и ограничены по размеру, ссылайтесь на общие, большие или бесконечно растущие данные, а схему стройте вокруг самых частых запросов.
Практика - Базы данных3 мин
Как сделать бэкап и восстановить базу данных MySQL
Для большинства баз достаточно mysqldump с флагом --single-transaction, запуска по расписанию и копии дампа на другом сервере; для больших баз и быстрого восстановления используйте Percona XtraBackup.
Практика - Базы данных3 мин
OLTP и OLAP: транзакционные и аналитические базы данных
OLTP-базы обслуживают множество мелких операций приложения: заказы, оплаты, регистрации. OLAP-базы рассчитаны на тяжёлые аналитические запросы по большим объёмам истории. Смешивать эти нагрузки в одной базе — частая причина тормозов в продакшене.
Основы - Базы данных4 мин
Пул соединений PgBouncer: настройка и подводные камни
PgBouncer позволяет тысячам клиентов делить небольшое число реальных соединений с PostgreSQL; для веба и serverless берите режим transaction, но откажитесь от состояния сессии и явно решите вопрос с prepared statements.
Продвинутое - Базы данных4 мин
Резервное копирование PostgreSQL: pg_dump и pg_restore
Делайте дампы через pg_dump в custom-формате (-Fc) — они сжаты и гибко восстанавливаются через pg_restore; роли сохраняйте отдельно через pg_dumpall --globals-only. Автоматизируйте бэкапы через cron, храните несколько копий, включая одну вне сервера, и регулярно проверяйте, что восстановление действительно работает.
Практика - Базы данных3 мин
Как найти медленные запросы в PostgreSQL: EXPLAIN ANALYZE
Сначала найдите самые дорогие запросы через pg_stat_statements или log_min_duration_statement, затем запустите для них EXPLAIN (ANALYZE, BUFFERS) и ищите узел, где тратится время: чаще всего это Seq Scan по большой таблице или лишняя сортировка, которые лечатся правильным индексом.
Практика - Базы данных3 мин
Полнотекстовый поиск в PostgreSQL: нужен ли Elasticsearch
Большинству сайтов хватает PostgreSQL: tsvector с GIN-индексом даёт релевантный поиск по словам, pg_trgm прощает опечатки, а Elasticsearch окупается только при высокой нагрузке, сложном ранжировании или богатом фасетном поиске.
Практика - Базы данных4 мин
Типы индексов PostgreSQL: B-tree, GIN, GiST, BRIN и когда их применять
B-tree — для равенства, диапазонов и сортировки; GIN — для поиска «что внутри» в jsonb, массивах и полнотекстовом поиске; GiST — для пересечений, геоданных и ближайших соседей; BRIN — для огромных append-only таблиц, упорядоченных по времени.
Продвинутое - Базы данных4 мин
JSONB в PostgreSQL: когда и как хранить JSON в таблице
Храните JSON в колонке jsonb, индексируйте её GIN-индексом и используйте для действительно гибких данных вроде атрибутов товаров и сырых webhook; всё, по чему вы фильтруете, связываете и считаете деньги, выносите в обычные колонки.
Практика - Базы данных3 мин
Восстановление PostgreSQL на момент времени (PITR) через WAL
PITR восстанавливает базовый бэкап и проигрывает архивные WAL-файлы до выбранного момента, поэтому базу можно вернуть на секунду до ошибочного DELETE; для этого нужна непрерывная архивация WAL и регулярные тестовые восстановления.
Продвинутое - Базы данных4 мин
Пользователи, роли и права доступа в PostgreSQL
Правильная схема прав в PostgreSQL — групповые роли без входа (владелец, приложение, аналитика) и отдельные логины, которые в них входят; права выдаются через GRANT и ALTER DEFAULT PRIVILEGES, BI получает только чтение, а изоляцию строк обеспечивает Row-Level Security.
Практика - Базы данных4 мин
Как настроить потоковую репликацию в PostgreSQL
Разрешите репликацию на primary, создайте роль и слот, разверните standby через pg_basebackup с флагом -R, следите за отставанием в pg_stat_replication, а переключение делайте через pg_promote или автоматически с Patroni.
Продвинутое - Базы данных3 мин
PostgreSQL или MySQL: какую базу данных выбрать
Обе базы надёжны и подходят для большинства проектов. PostgreSQL — более богатый выбор для сложной логики, аналитики, JSON и геоданных; MySQL — простой и повсеместно доступный вариант для типовых сайтов, CMS вроде WordPress и нагрузок с простыми запросами.
Основы - Базы данных4 мин
Power BI для начинающих: создаём первый отчёт
Первый отчёт в Power BI — это пять шагов: подключить источники, привести данные в порядок в Power Query, связать таблицы в модель «звезда», написать несколько мер DAX и опубликовать отчёт в Power BI Service с плановым обновлением.
Практика - Базы данных4 мин
Power BI, Metabase или Looker Studio: какой BI выбрать
Looker Studio — быстрый бесплатный старт для компаний на Google Sheets и сервисах Google; Metabase — лучший выбор, если данные лежат в своей SQL-базе и есть кому поднять сервер; Power BI — для сложной аналитики и компаний в экосистеме Microsoft.
Практика - Базы данных4 мин
Первичный и внешний ключ: как связываются таблицы
Первичный ключ однозначно определяет каждую строку своей таблицы, а внешний ключ — колонка, ссылающаяся на первичный ключ другой таблицы; вместе они строят связи между таблицами и не дают базе сохранить ссылку на несуществующую строку.
Основы - Базы данных3 мин
Как построить простой ETL-конвейер на Python
Простой ETL на Python — это три функции (extract, transform, load) плюс четыре правила надёжности: повторы при сбоях сети, идемпотентная загрузка через upsert, инкрементальная выборка по отметке времени и запуск по расписанию с логами.
Практика - Базы данных4 мин
Персистентность Redis: RDB или AOF и как не потерять данные
RDB делает периодические снимки и может потерять изменения с последнего снимка, AOF записывает каждую операцию и при appendfsync everysec теряет обычно не больше секунды; для сессий и очередей включайте AOF вместе с RDB, для чистого кэша персистентность часто не нужна.
Практика - Базы данных3 мин
Redis на практике: кэш, сессии, очереди и лимиты запросов
Redis — хранилище в памяти для быстрых и недолговечных данных: кэш с TTL, сессии, лёгкие очереди, pub/sub, рейтинги и лимиты запросов, а источником истины остаётся основная база.
Практика - Базы данных4 мин
Шардирование и партиционирование: как масштабировать базу
Партиционирование делит большую таблицу на части внутри одного сервера, а шардирование распределяет данные по нескольким серверам по ключу шарда; начинайте с партиционирования и шардируйте, только когда один сервер действительно не справляется.
Продвинутое - Базы данных4 мин
Основы SQL: SELECT, WHERE, ORDER BY и LIMIT
Почти любой запрос на чтение строится по схеме SELECT столбцы FROM таблица WHERE условие ORDER BY сортировка LIMIT количество. Освоив эти пять частей, а также LIKE, IN и IS NULL, вы сможете достать из базы большинство нужных данных.
Основы - Базы данных3 мин
GROUP BY, HAVING и агрегатные функции в SQL
GROUP BY собирает строки в группы, агрегатные функции считают по каждой группе одно значение, WHERE фильтрует строки до группировки, а HAVING фильтрует уже готовые группы.
Практика - Базы данных4 мин
SQL INSERT, UPDATE и DELETE: как безопасно изменять данные
INSERT добавляет строки, UPDATE меняет их, DELETE удаляет; чтобы изменять данные безопасно, проверьте условие WHERE через SELECT, выполните изменение в транзакции и сверьте число затронутых строк до COMMIT.
Основы - Базы данных5 мин
JOIN в SQL: INNER, LEFT, RIGHT и FULL на примерах
JOIN объединяет строки двух таблиц по условию совпадения: INNER оставляет только совпадения, LEFT — все строки левой таблицы, RIGHT — все строки правой, а FULL — всё из обеих, заполняя пробелы значением NULL.
Основы - Базы данных4 мин
NULL в SQL: IS NULL, COALESCE и типичные ловушки
NULL означает неизвестное значение, поэтому любое сравнение с ним даёт UNKNOWN, а не true или false; проверяйте его через IS NULL, подставляйте значение через COALESCE и запрещайте через NOT NULL там, где значение должно быть всегда.
Основы - Базы данных4 мин
Пагинация в SQL: OFFSET или keyset (курсорная) пагинация
OFFSET заставляет базу читать и выбрасывать все пропущенные строки и сбивается при вставках; keyset-пагинация продолжает выборку с последней показанной записи через WHERE по стабильной сортировке и работает одинаково быстро на любой глубине.
Практика - Базы данных4 мин
Чек-лист оптимизации SQL-запросов
Сначала измерьте запрос через EXPLAIN ANALYZE, затем выбирайте только нужные колонки, пишите условия, которые могут использовать индекс, заменяйте OFFSET на keyset-пагинацию и убирайте N+1 пакетными запросами.
Практика - Базы данных3 мин
Подзапросы и CTE в SQL: как писать читаемые запросы
Подзапрос удобен для короткой проверки внутри условия, CTE (WITH) — для многошаговой логики, которую нужно читать сверху вниз, а рекурсивный CTE — единственный стандартный способ обойти иерархию; в современных СУБД по скорости они обычно равны.
Практика - Базы данных3 мин
SQL и NoSQL: в чём разница и что когда выбирать
SQL-базы хранят данные в связанных таблицах со строгой схемой и надёжными транзакциями, NoSQL — в документах, парах ключ-значение, колонках или графах с более гибкой структурой. Для большинства бизнес-приложений разумно начинать с SQL, а NoSQL добавлять под конкретную задачу.
Основы - Базы данных3 мин
Оконные функции SQL: ROW_NUMBER, RANK, LAG и другие
Оконная функция считает значение по набору связанных строк, но в отличие от GROUP BY не схлопывает их: каждая строка остаётся в результате и получает номер, ранг, накопительную сумму или значение соседней строки.
Практика - Базы данных4 мин
Схема «звезда» и «снежинка»: моделирование данных для аналитики
В обеих схемах события с числами лежат в центральной таблице фактов, окружённой измерениями; «звезда» хранит каждое измерение одной широкой таблицей ради простых и быстрых запросов, «снежинка» дробит измерения на нормализованные подтаблицы, а BI-инструменты лучше всего работают со «звездой».
Основы - Базы данных4 мин
Уровни изоляции транзакций: от dirty read до serializable
Уровень изоляции определяет, какие аномалии видят параллельные транзакции: Read Committed убирает грязное чтение, Repeatable Read ещё и неповторяющееся, а Serializable ведёт себя так, будто транзакции шли по очереди; для логики «прочитал-изменил-записал» используйте SELECT FOR UPDATE или атомарный UPDATE.
Продвинутое - Базы данных4 мин
Основы анализа данных: описательная, диагностическая, прогнозная
Аналитика по очереди отвечает на четыре вопроса: что произошло (описательная), почему (диагностическая), что будет (прогнозная) и что делать (предписывающая). Полезный анализ начинается с чёткого вопроса бизнеса и точно определённой метрики, а не с данных.
Основы - Базы данных4 мин
UUID или автоинкремент: какой первичный ключ выбрать
Для типичного веб- и мобильного бэкенда разумный выбор по умолчанию — UUIDv7 в нативном типе uuid: его можно генерировать где угодно, он не раскрывает объёмы и вставляется почти как автоинкремент; bigint identity хорош для внутренних таблиц в одной базе.
Практика - Базы данных3 мин
Что такое хранилище данных (DWH) и зачем оно бизнесу
Хранилище данных (DWH) — это отдельная база для аналитики, куда регулярно сводятся данные из CRM, учётной системы, сайта и рекламы, чтобы отвечать на вопросы бизнеса по единым и проверенным цифрам.
Основы - Базы данных4 мин
Что такое база данных и как она работает
База данных — это упорядоченное хранилище информации, а СУБД — программа, которая сохраняет эти данные на диск, быстро находит нужное по запросу и не даёт данным испортиться при одновременной работе многих пользователей.
Основы - Базы данных3 мин
Что такое графовая база данных и когда нужен Neo4j
Графовая база хранит данные как узлы и связи между ними и быстро проходит по цепочкам связей любой глубины; она нужна, когда главный вопрос — «кто с кем и через кого связан», а не «сколько и сколько стоит».
Основы - Базы данных4 мин
Что такое база временных рядов: TimescaleDB, InfluxDB и другие
База временных рядов оптимизирована под измерения с отметкой времени, которые в основном дописываются, запрашиваются по интервалам и со временем устаревают; начинайте с PostgreSQL и переходите на TimescaleDB, InfluxDB, ClickHouse или Prometheus, когда объём, хранение или агрегаты становятся проблемой.
Основы - Базы данных3 мин
Что такое ORM: плюсы, минусы и популярные решения
ORM — это библиотека, которая позволяет работать с таблицами базы данных как с объектами в коде и сама генерирует SQL. Она ускоряет типовую разработку, но требует понимания, какие запросы уходят в базу, иначе легко получить проблему N+1 и медленные страницы.
Основы - Базы данных3 мин
Что такое BI-системы и как они помогают принимать решения
BI (Business Intelligence) — это набор инструментов и процессов, который превращает данные из рабочих систем в регулярные отчёты и дашборды, чтобы решения принимались по актуальным цифрам, а не по ощущениям.
Основы - Базы данных3 мин
Что такое ClickHouse и почему его выбирают для аналитики
ClickHouse — open-source колоночная СУБД для аналитики: она быстро сканирует и агрегирует миллиарды строк, потому что читает только нужные колонки и хорошо их сжимает. Для частых точечных обновлений и транзакций она не подходит, поэтому обычно работает рядом с PostgreSQL, а не вместо него.
Основы - Базы данных3 мин
Что такое репликация базы данных и зачем она нужна
Репликация непрерывно копирует изменения с основной базы на одну или несколько реплик: так можно распределить нагрузку на чтение и переключиться на реплику, если основной сервер упал. Она защищает от отказа сервера, но не от ошибок: удалённая таблица удалится и на всех репликах, поэтому бэкапы всё равно нужны.
Основы - Базы данных4 мин
Что такое dbt и как он преобразует данные в хранилище
dbt — это инструмент, который выполняет трансформации данных прямо в хранилище: вы пишете модели как обычные SELECT-запросы, а dbt строит их в правильном порядке, тестирует и документирует.
Основы - Базы данных4 мин
Что такое Elasticsearch и как устроен поисковый индекс
Elasticsearch — распределённый поисковый движок, который хранит JSON-документы в инвертированном индексе, поэтому быстро находит слова среди миллионов записей и сортирует результаты по релевантности; он нужен, когда LIKE-запросов к базе уже не хватает для нормального полнотекстового поиска.
Основы - Базы данных3 мин
Что такое MongoDB и когда её стоит использовать
MongoDB — документная NoSQL-база, которая хранит данные как JSON-подобные документы в коллекциях без жёсткой схемы. Она удобна для гибких и вложенных данных, а для связанных финансовых и учётных данных обычно надёжнее реляционная база.
Основы - Базы данных3 мин
Что такое Redis и почему он такой быстрый
Redis — это хранилище ключ-значение, которое держит все данные в оперативной памяти и поэтому отвечает очень быстро. Его используют для кэша, сессий, очередей, счётчиков и рейтингов, а не как единственную базу для важных данных.
Основы - Базы данных3 мин
Что такое SQLite и когда её достаточно
SQLite — полноценная SQL-база в виде библиотеки, которая хранит всё в одном файле и не требует отдельного сервера. Её достаточно, пока с данными работает одна машина и записей немного; когда писать одновременно нужно многим процессам или серверам, пора на PostgreSQL или MySQL.
Основы - Базы данных4 мин
Изменение схемы БД без простоя: паттерн expand and contract
Не меняйте живую схему одним ломающим шагом: сначала расширьте её (добавьте новые структуры рядом со старыми), постепенно перенесите данные и код, а потом сожмите — удалите старое, когда им уже никто не пользуется.
Продвинутое
Есть идея или задача? Расскажите нам
Ответим в течение рабочего дня и предложим решение. Консультация бесплатная.