Data Science. SQL hub
36K subscribers
1.04K photos
79 videos
37 files
1.08K links
По всем вопросам- @workakkk

@itchannels_telegram - 🔥лучшие ит-каналы

@ai_machinelearning_big_data - Machine learning

@pythonl - Python

@pythonlbooks- python книги📚

@datascienceiot - ml книги📚

РКН: https://vk.cc/cIi9vo
Download Telegram
This media is not supported in your browser
VIEW IN TELEGRAM
🖥 Большие таблицы в SQL - сначала план, потом запрос

Самый полезный апгрейд, который реально экономит часы: не "оптимизировать запрос на глаз", а заставить базу самой показать, что она делает.

На больших таблицах скорость почти всегда решают 3 вещи: правильный индекс, правильная форма запроса и правильный JOIN-порядок.

Железное правило: прежде чем трогать код, запускают EXPLAIN ANALYZE и смотрят две красные зоны - Seq Scan на большой таблице и огромные строки после JOIN. Если видишь Seq Scan - значит фильтр не поддержан индексом или условие написано так, что индекс не используется. Если после JOIN получаются миллионы строк - значит нужно сначала отфильтровать и/или агрегировать, а потом соединять.

Самый мощный прием для больших таблиц: сначала выбрать маленький набор ключей (CTE или подзапрос), и только потом JOIN к тяжелой таблице. Это резко уменьшает работу базы, потому что она перестает "перемножать" всё со всем.



ПЛОХО: тяжелый JOIN сразу, база тащит миллионы строк
SELECT u.id, COUNT(e.*) AS events_30d
FROM users u
JOIN events e ON e.user_id = u.id
WHERE e.created_at >= NOW() - INTERVAL '30 days'
AND u.country = 'TH'
GROUP BY u.id;

-- ХОРОШО: сначала сузить пользователей до маленького набора, потом JOIN
WITH target_users AS (
SELECT id
FROM users
WHERE country = 'TH'
)
SELECT tu.id, COUNT(*) AS events_30d
FROM target_users tu
JOIN events e ON e.user_id = tu.id
WHERE e.created_at >= NOW() - INTERVAL '30 days'
GROUP BY tu.id;

-- Индексы, которые реально помогают этому паттерну
CREATE INDEX IF NOT EXISTS idx_users_country_id ON users (country, id);
CREATE INDEX IF NOT EXISTS idx_events_user_time ON events (user_id, created_at);

-- Всегда проверяй, что база использует индекс, а не Seq Scan
EXPLAIN (ANALYZE, BUFFERS)
WITH target_users AS (
SELECT id FROM users WHERE country = 'TH'
)
SELECT tu.id, COUNT(*)
FROM target_users tu
JOIN events e ON e.user_id = tu.id
WHERE e.created_at >= NOW() - INTERVAL '30 days'
GROUP BY tu.id;
Please open Telegram to view this post
VIEW IN TELEGRAM
13🔥5👍3😁2
This media is not supported in your browser
VIEW IN TELEGRAM
📌 UI-TARS-desktop — открытое приложение-агент с GUI, которое превращает ваш компьютер в **интерактивного AI-ассистента** с визуальным восприятием и управлением интерфейсом.

Что это и зачем:

🤖 AI-агент, который видит и кликает
Проект основан на модели UI-TARS (User Interface — Task Automation & Reasoning System). Агент реально *видит экран*, распознаёт элементы интерфейса и может управлять мышью, клавиатурой и браузером по простым естественным командам.

🖥️ Контроль компьютера на естественном языке
Вместо интеграций через API вы пишете команды, а модель сама ищет кнопки, поля ввода и прочие UI-элементы, затем *выполняет действия*. Это работает с приложениями, браузером и элементами рабочего стола.

⚙️ Open-source и кросс-платформа
Проект распространяется под Apache-лицензией, есть релизы, активная история версий и документация для запуска на Windows и macOS. :

📦 Цели проекта
UI-TARS-desktop — это не просто демонстрация: это полноценный мультимодальный AI-агентный стек, который можно использовать для автоматизации повседневных задач без ручного вмешательства.

Страница репозитория: github.com/bytedance/UI-TARS-desktop
4
This media is not supported in your browser
VIEW IN TELEGRAM
📌 EXISTS РАБОТАЕТ БЫСТРЕЕ COUNT

SQL-совет: перестаньте считать всё через COUNT(*)

Многие пишут так:

SELECT COUNT(*)
FROM orders
WHERE user_id = 123;

Чтобы проверить — есть ли записи.

Проблема:
COUNT(*) считает все строки, даже если нужна просто проверка существования.
На больших таблицах это лишняя нагрузка и медленный запрос.

Правильнее использовать EXISTS.

Почему это лучше:
- База останавливается на первой найденной строке
- Меньше чтения данных
- Быстрее на больших таблицах
- Использует индексы эффективнее

Пример:


-- Плохо
SELECT COUNT(*)
FROM orders
WHERE user_id = 123;

-- Хорошо
SELECT EXISTS (
SELECT 1
FROM orders
WHERE user_id = 123
);

-- Или в условии
SELECT *
FROM users u
WHERE EXISTS (
SELECT 1
FROM orders o
WHERE o.user_id = u.id
);
🔥19👍93👎1😱1
В Python 3.14 появилось решение, которое помогает избавиться от SQL-инъекций - t-strings 🔒

Проблема

Когда вы используете f-strings для SQL:


query = f"SELECT * FROM users WHERE name = '{user_input}'"

пользовательский ввод напрямую попадает в запрос.

Если злоумышленник передаст:


admin'; DROP TABLE users; --

— база выполнит вредоносную команду.

Это классическая SQL injection.

Почему это неудобно сейчас

Безопасный способ — параметризованные запросы:


cursor.execute(
"SELECT * FROM users WHERE name = %s",
(user_input,)
)

Но приходится:

• запускать шаблон отдельно
• передавать значения отдельно
• поддерживать две структуры

Что изменилось в Python 3.14

Появились template string literals (t-strings).

В отличие от f-strings, они:

• не возвращают готовую строку

• возвращают объект Template

• отдельно хранят текст и подставленные значения

Пример:

query = t"SELECT * FROM users WHERE name = {user_input}"


Теперь можно:

• получить все интерполяции
• проверить значения
• экранировать или валидировать их
• и только потом собрать финальный SQL


safe = safe_sql(query)

Результат:

• вредоносный ввод очищается
• SQL-инъекции блокируются
• таблицы остаются на месте

Почему это важно

f-strings - быстрые, но опасные для SQL.

t-strings позволяют сохранить удобство шаблонов и добавить контроль безопасности.

Python движется к безопасным шаблонам по умолчанию, меньше ручной защиты, меньше уязвимостей в продакшене.
🔥15👍41
This media is not supported in your browser
VIEW IN TELEGRAM
🎯Продвинутая миграция в SQL, которая спасает продакшен от падения

Самая частая проблема при миграциях - блокировки.

Обычный CREATE INDEX или ALTER TABLE на большой таблице может:
остановить записи
заморозить сервис
создать очередь запросов
и положить базу.

Продвинутый подход - выполнять изменения без блокировки.

В PostgreSQL для этого есть режим CONCURRENTLY.

Он создаёт индекс в фоне,
не блокирует INSERT и UPDATE,
и позволяет делать миграции без даунтайма.

Если таблица большая - это не оптимизация.
Это обязательная практика.

-- Создание индекса без блокировки таблицы
CREATE INDEX CONCURRENTLY idx_payments_user_id
ON payments(user_id);

-- Удаление индекса без блокировки
DROP INDEX CONCURRENTLY idx_payments_user_id;
👍10🔥32
DeepSeek готовится выпустить новую модель V4 - релиз ожидается в ближайшее время (по данным CNBC).

И рынок уже нервничает.

NASDAQ находится под давлением — инвесторы закладывают сценарий, при котором новый релиз может резко усилить конкуренцию и изменить расклад в AI-индустрии.

Почему такая реакция?


DeepSeek V4, по слухам, должен стать серьёзным скачком вперёд:
- более сильное reasoning
- лучшая эффективность
- более низкая стоимость

Если это подтвердится, давление на американские AI-компании и их оценки может усилиться.

Контекст становится ещё интереснее на фоне недавнего заявления Anthropic, где компания сообщила о масштабных попытках distillation через API.

Во времени это выглядит как совпадение:
- готовится крупный релиз DeepSeek
- рынок нервничает
- и одновременно звучат обвинения в копировании возможностей моделей

Если V4 действительно окажется сильным, это может означать новую фазу AI-гонки.

Ответ узнаем очень скоро.

Следующий релиз может повлиять не только на технологии -
но и на рынок.

https://www.cnbc.com/2026/02/23/deepseek-to-release-new-ai-model-a-rough-period-for-nasdaq-stocks-could-follow.html
🔥64👍3👎1
🖥 Большинство “парсеров” умирают через 2 дня.
Ты научишься делать те, которые живут в проде.

Это не про BeautifulSoup ради галочки.
Это про системы сбора данных, которые:

• не падают от мелких правок на сайте
• собирают данные в разы быстрее
• обновляют всё сами по расписанию
• обходят ограничения и баны
• выглядят как сервис, а не хаос из файлов

Ты начнёшь видеть сайты не как страницы, а как источники данных, к которым можно подключиться.

В итоге ты сможешь:

• забирать данные для своих проектов
• автоматизировать чужую рутину
• делать инструменты для аналитики
• брать коммерческие заказы на сбор данных

Это навык, который напрямую превращается в деньги.
Не “знаю Python”, а умею добывать данные из интернета профессионально.

🎁 48 часов скидка 50% на Stepik: https://stepik.org/a/269942/
Please open Telegram to view this post
VIEW IN TELEGRAM
4👍2🔥2👎1
Создатель Linux
— обычный стол, минимум техники, ничего лишнего.

Обычный «тех-бро»
— три монитора, RGB, мощный ПК, студийный свет, полный сетап.

Иногда разница между «легендой» и «тех-инфлюенсером» - не в железе, а в том, что у тебя в голове.
👍24🔥75👎5
📊 Real-time SQL Traffic Viewer

sql-tap — это прокси-демон, который перехватывает SQL-запросы между вашим приложением и базой данных (PostgreSQL или MySQL), отображая их в интерактивном терминальном интерфейсе. Позволяет анализировать запросы и транзакции без изменения кода приложения.

🚀Основные моменты:
- Перехват SQL-запросов в реальном времени
- Поддержка PostgreSQL и MySQL
- Интерактивный интерфейс для анализа запросов
- Возможность использования EXPLAIN для оптимизации запросов

📌 GitHub: https://github.com/mickamy/sql-tap

#go
This media is not supported in your browser
VIEW IN TELEGRAM
Как правильно установить и использовать браузер в Linux.

Если браузер работает медленно или ломается после обновлений - проблема часто не в Linux, а в установке. Многие ставят браузер из случайных источников или вручную скачивают архивы, из-за чего нет автообновлений, слетают зависимости и появляются ошибки.

Правильный подход - устанавливать браузер из официального репозитория или через пакетный менеджер системы. Тогда вы получаете:
• автоматические обновления безопасности
• корректные зависимости
• стабильную работу
• удобный запуск из системы

Для примера установим Google Chrome официальным способом.


Установка Google Chrome (Ubuntu / Debian)
wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
sudo apt install -y ./google-chrome-stable_current_amd64.deb

Запуск браузера
google-chrome

Обновление системы (включая браузер)
sudo apt update && sudo apt upgrade -y

Проверка версии
google-chrome --version
5👍3👎1
👣 Большинство изучают Go ради синтаксиса.

Ты научишься писать сервисы, которые работают в продакшене.

Это не про «Hello, World» и горутины ради галочки.
Это про бэкенд на Go, который:

* выдерживает нагрузку
* обрабатывает тысячи запросов одновременно
* работает быстро и стабильно
* легко масштабируется
* выглядит как реальный сервис, а не учебный проект

Ты начнёшь видеть Go не как язык, а как инструмент для построения систем.

В итоге ты сможешь:

* писать высоконагруженные API
* создавать микросервисы
* работать с базами данных и очередями
* разбираться в конкурентности и производительности
* брать коммерческие backend-проекты

Это навык, который ценится на рынке.
Не «знаю Go», а умею делать быстрые и надёжные сервисы.

🎁 48 часов скидка 50% на Stepik: https://stepik.org/a/274119/
Please open Telegram to view this post
VIEW IN TELEGRAM
👍21🤬1
UPDATE без WHERE -
самый быстрый способ обновить резюме.

@sqlhub
😁504👎2
Redis и Valkey изучите секреты самых популярных open source key-value СУБД

В высоко-нагруженных сервисах Redis — не просто кэш, а важная подсистема, на которой строится значимая часть бизнес-логики. От его стабильности, масштабируемости и отказоустойчивости зависит производительность всего сервиса. Valkey - это современный производительный форк Redis с открытым исходным кодом, поддерживаемый сообществом и рядом крупных компаний. Valkey набирает популярность, поддержан крупными облачными провайдерами, и вполне возможно потеснит или вовсе заменит Redis со временем.

Наш курс — для тех, кто хочет держать свой стэк и знания актуальными и глубоко разбираться, как устроен Redis и Valkey.

🌐 В программе курса:

🤩 Как эффективно использовать базовые и продвинутые структуры данных: HyperLogLog, Bitmaps и Bisields, Streams, Geospatial-индексы, Bloom Filters
🤩 Как проектировать in-memory системы, которые не разваливаются под нагрузкой, что влияет на отказоустойчивость и как её добиться
🤩 Как работает репликация и кластеризация на практике (режимы Sentinel и Cluster)
🤩 Как встроить Redis/Valkey в реальный прод с учётом безопасности, интеграций и современных практик мониторинга.

Кто мы: R&D-центр Devhands, основатель школы Алексей Рыбак. Автор курса — Константин Ратвин, преподаватель МФТИ на кафедре БИТ (совместно со СберТех), эксперт по распределённым системам и банковским ИТ, автор курсов по СУБД и инфраструктуре, спикер HighLoad++ и PGConf.

🗓 Старт курса: 10 марта, 6 недель обучения.
Изучить программу и записаться можно здесь.

Ждем вас!

Реклама. ИП Рыбак А.А. ИНН 771407709607 Erid: 2VtzqwiAH9N
Please open Telegram to view this post
VIEW IN TELEGRAM
👍51
У вас есть две таблицы: users (ID, name) и orders (user_id, amount). Какой тип JOIN вернёт всех пользователей, включая тех, у которых нет заказов?
Anonymous Quiz
10%
A) INNER JOIN
28%
B) FULL OUTER JOIN
57%
C) LEFT JOIN
5%
D) RIGHT JOIN
👍3
ReadySet — это прозрачный кэш базы данных для Postgres и MySQL, который обеспечивает производительность и масштабируемость хранилища «ключ-значение» в оперативной памяти, не требуя от вас переписывать приложение или вручную обрабатывать аннулирование кэша.

https://github.com/readysettech/readyset
2👍1🔥1