14500
Присоединяйтесь к нашему каналу и погрузитесь в мир баз данных Связь: @devmangx РКН: https://clck.ru/3H4Wo3
Кэш ускоряет приложение, но ошибки в кэшировании снижают его надёжность.
Частые антипаттерны:
• Кэшировать всё подряд. Выбирайте часто запрашиваемые данные и заранее определяйте, насколько устаревшими они могут быть.
• Не задавать TTL. Без срока действия или надёжной инвалидации устаревшие значения могут оставаться в кэше неограниченно долго.
• Обновлять БД и кэш без согласованной стратегии. Одна запись проходит, другая падает — данные расходятся. Продумайте порядок обновления, инвалидацию и обработку сбоев: write-through и write-behind сами по себе не гарантируют согласованность.
• Не учитывать отказ кэша. Предусмотрите резервный сценарий. Но помните: переключение всего трафика на БД может перегрузить её — нужны ограничения нагрузки.
• Не планировать инвалидацию. Заранее решите, когда удалять или обновлять записи и как распространять изменения между экземплярами приложения.
В архитектуре, где БД — источник истины, кэш должен ускорять доступ к данным, а не определять их корректность.
👉 @SQLPortal
SQL, Pandas и Power BI: 10 операций для работы с данными
Фильтрация, объединение таблиц, ранжирование и накопительные итоги — одни и те же задачи можно решать разными инструментами.
Сравните подходы, чтобы понять общую логику операций и легче переключаться между SQL, Pandas и Power BI.
👉 @SQLPortal
SQL начинается с SELECT, но логика запроса — с FROM
Логический порядок обработки запроса:
• FROM / JOIN — определить источники и объединить таблицы.
• WHERE — отфильтровать строки.
• GROUP BY — сформировать группы.
• HAVING — отфильтровать группы.
• SELECT — вычислить выражения и выбрать столбцы.
• DISTINCT — убрать дубликаты, если указан.
• ORDER BY — отсортировать результат.
• LIMIT / OFFSET — ограничить выдачу и пропустить строки.
Поэтому псевдоним из SELECT обычно доступен в ORDER BY, но не в WHERE: на этапе фильтрации он ещё не определён.
Это логический порядок, а не физический план выполнения. Оптимизатор может обрабатывать данные иначе, сохраняя смысл запроса.
👉 @SQLPortal
Из Excel в Python: знакомые задачи с pandas 🐼
Фильтрация, сортировка, группировка и объединение таблиц — всё, что вы делаете в Excel, можно выполнять и в pandas.
• Фильтры → отбор строк по условиям.
• Сортировка → sort_values().
• Группировка и итоги → groupby() и agg().
• Сводные таблицы → pivot_table().
• Поиск соответствий между таблицами → merge().
• Работа с пропусками → isna(), fillna() и dropna().
Знакомая логика помогает освоиться, а код позволяет автоматизировать обработку и повторять её на новых данных.
👉 @SQLPortal
Масштабирование базы данных: 6 подходов, которые стоит знать
Рост данных и трафика требует разных решений. Прежде чем масштабировать базу, определите, что ограничивает производительность: CPU, память, диски, запросы или количество соединений.
• Вертикальное масштабирование — добавить серверу CPU, RAM и более быстрые диски.
• Реплики для чтения — распределить запросы на чтение между копиями базы, учитывая задержку репликации.
• Шардинг — распределить данные между несколькими узлами.
• Партиционирование — разделить большую таблицу на части, чтобы упростить обслуживание и ускорить подходящие запросы.
• Кэширование — сократить повторные обращения к базе.
• Пул соединений — переиспользовать подключения и ограничивать их количество.
У каждого подхода свои ограничения и цена сложности. Выбирайте по измерениям и характеру нагрузки. Сохраните шпаргалку для работы и подготовки к собеседованию по System Design.
👉 @SQLPortal
SQL проще изучать, если разделить его по задачам
• Определять структуру таблиц: CREATE, ALTER, DROP.
• Получать данные: SELECT, WHERE, ORDER BY.
• Добавлять, изменять и удалять записи: INSERT, UPDATE, DELETE.
• Управлять доступом: GRANT, REVOKE.
• Управлять транзакциями: BEGIN, COMMIT, ROLLBACK.
• Объединять таблицы: JOIN.
Считать итоги: GROUP BY, COUNT, SUM, AVG, MIN, MAX.
Начните с конкретной задачи — так проще понять, какие конструкции нужны и как они работают вместе.
👉 @SQLPortal
Дубликаты в SQL: способ зависит от задачи
• DISTINCT убирает повторяющиеся сочетания выбранных столбцов из результата запроса.
• GROUP BY объединяет строки в группы и позволяет посчитать повторы через COUNT(*).
• ROW_NUMBER() нумерует строки внутри группы, чтобы выбрать, какую запись оставить.
Убрать повторы из выдачи и удалить записи из таблицы — разные задачи. Перед DELETE проверьте выборку удаляемых строк и сделайте резервную копию.
👉 @SQLPortal
Быстрый SQL начинается с продуманных запросов
1. Выбирайте только нужные столбцы. Вместо SELECT * перечисляйте поля: это уменьшает объём передаваемых данных.
2. Создавайте подходящие индексы. Учитывайте столбцы, используемые в WHERE, JOIN и ORDER BY.
3. Избегайте функций над индексируемыми столбцами в условиях. Вместо YEAR(date) = 2024 используйте диапазон дат — он может позволить использовать обычный индекс.
4. Используйте EXISTS для проверки существования строк. Но не считайте его всегда быстрее IN: сравнивайте планы выполнения.
5. Ограничивайте выдачу через LIMIT или TOP. Это сокращает результат, но не обязательно объём работы базы данных.
6. Сравнивайте JOIN и подзапросы. Выбирайте вариант с нужной семантикой и лучшим планом: объединение не всегда быстрее и может размножать строки.
7. Отсекайте ненужные строки через WHERE. Чем меньше данных обрабатывается дальше, тем лучше; фактический порядок операций определяет оптимизатор.
8. Не используйте DISTINCT без необходимости. Удаление дубликатов требует ресурсов. Проверьте, не возникают ли они из-за ошибочного объединения.
9. Выбирайте UNION ALL, если удалять дубликаты не нужно. В отличие от UNION, он сохраняет все строки и не тратит ресурсы на устранение повторов.
10. Анализируйте планы выполнения. Используйте EXPLAIN и, где доступно, EXPLAIN ANALYZE, чтобы находить узкие места. Помните: EXPLAIN ANALYZE действительно выполняет запрос.
👉 @SQLPortal
Команды SQL проще запомнить по назначению
• DDL — создание и изменение структуры БД: CREATE, ALTER, DROP.
• DML — добавление, изменение и удаление данных: INSERT, UPDATE, DELETE.
• DCL — управление правами доступа: GRANT, REVOKE.
• TCL — управление транзакциями: COMMIT, ROLLBACK, SAVEPOINT.
• DQL — получение данных: SELECT.
В некоторых классификациях SELECT относят к DML, не выделяя DQL отдельно.
👉 @SQLPortal
Чтобы запросы оставались быстрыми, понятными и справлялись с ростом объёма данных, нужны хорошие привычки при их написании.
Вот 15 принципов, которые стоит применять на практике:
1. Избегайте SELECT *: выбирайте только нужные столбцы.
2. Отфильтровывайте ненужные строки с помощью WHERE.
3. Понимайте разницу между INNER JOIN и LEFT JOIN.
4. Используйте CTE вместо громоздких подзапросов для улучшения читаемости.
5. Не маскируйте ошибки логики лишним DISTINCT.
6. Используйте UNION ALL, если удалять дубликаты не требуется.
7. Освойте оконные функции для сложных расчётов.
8. Согласовывайте типы данных, чтобы избежать неявных преобразований.
9. Сравнивайте планы для EXISTS и IN: первый не всегда быстрее.
10. Убирайте ORDER BY, если сортировка не нужна.
11. Используйте CROSS JOIN только когда действительно нужно декартово произведение.
12. Учитывайте, что функции над индексированными столбцами могут мешать использованию обычного индекса.
13. Используйте CASE для понятной условной логики.
14. Изучайте план выполнения через EXPLAIN; помните, что EXPLAIN ANALYZE действительно выполняет запрос.
15. Проверяйте корректность на небольших наборах данных, а производительность — на объёмах, близких к реальным.
👉 @SQLPortal
Какие навыки нужны дата-инженеру?
В вакансиях прослеживается закономерность: на первом месте SQL и Python, дальше — облачные платформы, Spark, хранилища данных, оркестрация пайплайнов, потоковая обработка, Git, контейнеры и инструменты для работы с большими данными.
👉 @SQLPortal
Горизонтальные или вертикальные столбцы: что выбрать?
Оба варианта помогают сравнивать категории, но ориентация влияет на читаемость.
• Горизонтальные столбцы удобны, когда категорий много или у них длинные названия.
• Вертикальные столбцы подходят для небольшого количества категорий, которые нужно быстро сравнить между собой.
👉 @SQLPortal
DBcooper — лёгкий клиент для работы с базами данных
Open-source-приложение на Tauri, Rust и React объединяет PostgreSQL, SQLite, Redis и ClickHouse в одном интерфейсе. Акцент на простоте и удобной работе с клавиатуры. А ещё есть генерация SQL по описанию на естественном языке.
https://github.com/amalshaji/dbcooper
👉 @SQLPortal
Разбираем SQL-запросы с помощью Python
Какие таблицы и колонки использует запрос? Библиотека sql-metadata извлечёт эту информацию из SQL без подключения к базе и выполнения запроса.
Умеет работать с алиасами и подзапросами, определять колонки в SELECT, WHERE, JOIN и других частях запроса. Поддерживает синтаксис PostgreSQL, MySQL, SQLite, SQL Server и Apache Hive.
Пригодится для анализа SQL-файлов, автоматической документации и поиска зависимостей между запросами и таблицами.
https://github.com/macbre/sql-metadata
👉 @SQLPortal
Знатоки SQL и те, кто только учится, вопрос к вам
Какой из этих запросов вы выберете для выполнения?
👉 @SQLPortal
Аналитика данных строится на простом процессе:
Сначала данные извлекаются, преобразуются и загружаются с помощью ETL. Затем их обработка организуется в data pipelines (конвейеры данных), ошибки и неточности устраняются до начала анализа.
После этого с помощью Data Mining (интеллектуального анализа данных) в больших наборах данных выявляются закономерности, тенденции и полезные инсайты.
👉 @SQLPortal
SQL — это набор взаимосвязанных инструментов для работы с данными.
Запросы, JOIN, фильтрация, группировка, оконные функции, транзакции, управление доступом и структурой БД помогают решать разные части одной задачи.
Когда понимаешь, как они связаны, SQL становится понятной системой, а не набором команд для заучивания.
👉 @SQLPortal
SQL и DAX: одни данные, разные задачи
• SQL помогает извлекать, фильтровать, объединять и агрегировать данные в базе. Подходит для подготовки наборов данных и расчётов на стороне СУБД.
• DAX используется для вычислений в табличных моделях, например в Power BI. Меры учитывают контекст фильтрации и пересчитываются при выборе срезов и элементов отчёта.
SQL готовит данные, DAX помогает анализировать их интерактивно. Это полезный ориентир, хотя возможности обоих языков шире и частично пересекаются.
👉 @SQLPortal
Excel, Python или SQL: что выбрать для работы с данными?
Задачи часто одинаковые: фильтрация, сортировка, агрегация, обработка пропусков, вычисления и объединение таблиц. Отличаются инструменты и способ решения.
• Excel — для работы с таблицами вручную, формул и быстрого анализа.
• Python с pandas — для автоматизации, сложных преобразований и обработки данных из разных источников.
• SQL — для выборки, объединения и агрегации данных прямо в базе.
Сравните одни и те же операции в трёх инструментах: так проще увидеть общую логику и переносить навыки между ними.
👉 @SQLPortal
Практические уроки для Backend, Data Engineering и DevOps
Площадка с пошаговыми туториалами и облачными окружениями. Изучаем теорию и сразу выполняем команды без настройки локальной среды. В каталоге PostgreSQL, Redis, Docker, Kubernetes, Airflow, Spark и ClickHouse.
https://prepare.sh/
👉 @SQLPortal
Git пригодится и тем, кто пишет SQL
Храните запросы, миграции и схемы БД в репозитории: так проще отслеживать изменения, возвращаться к предыдущим версиям и обсуждать правки с командой.
В шпаргалке — базовые команды: создание репозитория, коммиты, ветки, слияние, stash и работа с удалённым репозиторием. Сохраните для работы над SQL-проектами.
👉 @SQLPortal
Числовые функции SQL: от округления до итогов 🔢
Они помогают обрабатывать числа и выполнять вычисления:
• ROUND — округлить до нужного количества знаков.
• CEIL / CEILING и FLOOR — округлить вверх или вниз до целого.
• ABS — получить модуль числа.
• MOD или % — найти остаток от деления.
• POWER — возвести число в степень.
Агрегатные функции обобщают данные: AVG вычисляет среднее, SUM — сумму, MIN и MAX — минимальное и максимальное значения. Названия и синтаксис отдельных функций зависят от СУБД.
👉 @SQLPortal
SQL помогает получить данные. Статистика — понять, что они означают
20 статистических понятий для работы с отчётами, метриками и аналитическими запросами.
👉 @SQLPortal
Pandas: Python для повседневных задач аналитика 🐼
Загрузить файлы с неаккуратными данными, изучить их структуру, очистить столбцы, сгруппировать результаты и объединить наборы данных — всё это можно сделать с Pandas.
Библиотека помогает подготовить данные для отчётов и машинного обучения, а также получить первые аналитические выводы.
👉 @SQLPortal
SQL: порядок написания ≠ порядок обработки
Запрос начинается с SELECT, но логически обрабатывается в другом порядке:FROM / JOIN → WHERE → GROUP BY → HAVING → SELECT → DISTINCT → ORDER BY → LIMIT
Понимание этой последовательности помогает разобраться, почему алиас из SELECT обычно недоступен в WHERE, а фильтрация результатов агрегации выполняется через HAVING.
Важно: это логический порядок, а физический план выполнения выбирает оптимизатор СУБД.
👉 @SQLPortal
Бэкап есть? А если найду? 😳
👉 @SQLPortal
Оконные функции SQL: аналитика без потери отдельных строк
В отличие от GROUP BY, оконные функции позволяют выполнять вычисления по группам строк, сохраняя каждую строку в результате.
Ранжирование, накопительные суммы, скользящие средние, сравнение с предыдущей или следующей строкой через LAG и LEAD, работа с процентилями и границами окна — базовые приёмы, которые стоит освоить.
👉 @SQLPortal
5 групп реляционных СУБД, которые полезно знать
• С открытым исходным кодом: PostgreSQL, MariaDB.
• Коммерческие и корпоративные: Oracle Database, Microsoft SQL Server, IBM Db2.
• Встраиваемые и настольные: SQLite, Microsoft Access.
• Распределённые SQL / NewSQL: CockroachDB, YugabyteDB.
• Облачные аналитические хранилища: Snowflake, Amazon Redshift.
Это условная группировка: здесь смешаны лицензирование, архитектура и назначение. Категории могут пересекаться — например, распределённая СУБД может одновременно быть open-source.
👉 @SQLPortal
Линтер и автоформаттер для SQL
Бесплатный инструмент с открытым исходным кодом, который проверяет SQL на соответствие заданным правилам и автоматически исправляет многие нарушения: отступы, пробелы, регистр ключевых слов и другие детали оформления.
Поддерживает PostgreSQL, MySQL, T-SQL, ClickHouse, BigQuery и другие диалекты. Работает с шаблонами Jinja и проектами dbt через отдельный плагин.
https://github.com/sqlfluff/sqlfluff
👉 @SQLPortal
CSRF ≠ XSS ≠ SQL-инъекция. Все три уязвимости безопасности, но механизмы атак у них разные
CSRF — межсайтовая подделка запроса: Злоумышленник заставляет браузер авторизованного пользователя отправить запрос на действие, которого пользователь не собирался выполнять.
XSS — межсайтовый скриптинг: Вредоносный JavaScript внедряется в страницу и выполняется в браузере другого пользователя в контексте сайта.
SQL-инъекция: Пользовательские данные изменяют структуру SQL-запроса, позволяя злоумышленнику читать, изменять или удалять данные.
Как защищаться:
CSRF
• Использовать CSRF-токены.
• Настроить атрибут SameSite для cookies.
• Проверять заголовки Origin/Referer для запросов, изменяющих состояние.
XSS
• Экранировать данные при выводе с учётом контекста: HTML, атрибуты, JavaScript.
• Если пользовательский HTML разрешён — очищать его с помощью санитайзера.
• Использовать строгую Content Security Policy (CSP) как дополнительный уровень защиты.
• Не вставлять недоверенный HTML напрямую в страницу.
SQL-инъекций
• Использовать подготовленные выражения и параметризованные запросы.
• Не подставлять пользовательский ввод в SQL через конкатенацию строк.
• Проверять входные данные и ограничивать права учётной записи БД.
Как запомнить:
CSRF — нежелательный запрос от вашего браузера.
XSS — чужой код в вашем браузере.
SQL-инъекция — чужая логика в запросе к базе.
👉 @SQLPortal