Data Science: SQL и Аналитика данных
№ 6205468675 На простом языке: про работу с данными, современные технологии, AI, машинное обучение и, немного, SQL. Сотрудничество: @niktwix Менеджер: @Spiral_Yuri
Ko'proq ko'rsatish📈 Telegram kanali Data Science: SQL и Аналитика данных analitikasi
Data Science: SQL и Аналитика данных (@pizdatascience) Rus til segmentidagi kanali faol ishtirokchi. Hozirda hamjamiyat 34 378 obunachidan iborat bo'lib, Texnologiyalar & Aralashmalar toifasida 3 765-o'rinni va Rossiya mintaqasida 18 477-o'rinni egallagan.
📊 Auditoriya ko‘rsatkichlari va dinamika
невідомо sanasidan buyon loyiha tez o‘sib, 34 378 obunachiga ega bo‘ldi.
15 Sentabr, 2026 dagi oxirgi ma’lumotlarga ko‘ra kanal barqaror faollikka ega. Oxirgi 30 kunda obunachilar soni -1 285 ga, so‘nggi 24 soatda esa 11 ga o‘zgardi va umumiy qamrov yuqori darajada qolmoqda.
- Tasdiqlash holati: Tasdiqlanmagan
- Jalb etish (ER): Auditoriya o‘rtacha 17.53% darajada jalb etiladi. Nashrdan keyingi dastlabki 24 soatda kontent odatda umumiy obunachilar sonining 14.88% ini tashkil etuvchi reaksiyalarni to‘playdi.
- Post qamrovi: Har bir post o‘rtacha 6 042 marta ko‘riladi; birinchi sutkada odatda 5 131 ta ko‘rish yig‘iladi.
- Reaksiyalar va o‘zaro ta’sir: Auditoriya faol: har bir postga o‘rtacha 0 ta reaksiya keladi.
- Tematik yo‘nalishlar: Kontent sql, индекс, sqlite, строка, index kabi asosiy mavzularga jamlangan.
📝 Tavsif va kontent siyosati
Muallif resursni shaxsiy fikrni ifoda etish maydoni sifatida ta’riflaydi:
“№ 6205468675
На простом языке: про работу с данными, современные технологии, AI, машинное обучение и, немного, SQL.
Сотрудничество: @niktwix
Менеджер: @Spiral_Yuri”
Yuqori yangilanish chastotasi (oxirgi ma’lumot 16 Sentabr, 2026 da olingan) sababli kanal doimo dolzarb va katta qamrovli bo‘lib qoladi. Analitika auditoriya kontent bilan faol hamkorlik qilishini, uni Texnologiyalar & Aralashmalar toifasidagi muhim ta’sir nuqtasiga aylantirishini ko‘rsatadi.
Nested Loop и в итоге прогнать миллионы сравнений.
В PostgreSQL быстро обновить статистику можно так:
ANALYZE users;
А проверить, насколько оценки оптимизатора отличаются от реальности:
EXPLAIN (ANALYZE, BUFFERS)
SELECT *
FROM users
WHERE status = 'active';
Смотри на разницу между rows= и actual rows=.
Если PostgreSQL ожидал 100 строк, а реально получил 500 000, проблема может быть не в индексе, а в плохой статистике.
Особенно часто это всплывает после массовых INSERT, UPDATE, импорта данных или резкого изменения распределения значений.
🫡 Всё про Data Science
🇷🇺 Читайте нас в MAX«Просто гарантируй, что в каждый момент времени пишет только одна машина».А на скрине как раз часть Go-кода LiteFS, которая продлевает этот lease и следит, чтобы узел не продолжал считать себя primary после истечения TTL. 🫡 Всё про Data Science 🇷🇺 Читайте нас в MAX
N+1 SQL → 21 запрос превратили в один JOIN, функция ускорилась со 104 до 70 мкс.
Три последовательных HTTP-вызова → tokio::try_join!, итоговое время почти вдвое меньше.
Неправильно настроенный Brotli в maplibre/martin → скорость была всего 27,9 KB/s. Одна правка конфига дала примерно 57x ускорение, а latency упала до <9 мс.
Ещё жёстче кейс с write lock, который держали на всём HTTP round trip. После переноса блокировки P95 для читателей рухнул с 1,11 секунды до 9,42 мкс.
И отдельная классика Tokio: unbounded channel молча накопил 73 сообщения, потому что consumer не успевал. Никакой ошибки, просто медленное движение к OOM.
Полезный порядок из гайда:
сначала SQL и HTTP, потом locks и channels, и только после этого CPU profiling.
Потому что один лишний поход в базу обычно стоит дороже, чем сотни мелких оптимизаций внутри hot loop.
➡️ hotpath.rs/blog/profiling-rust-guide
#Rust #Performance #Profiling #Tokio #Backend
🫡 Всё про Data Science
🇷🇺 Читайте нас в MAXЗакрываем летнюю акцию!Никаких унылых проводов лета - только хардкорная прокачка скиллов 👉@cyacademy_support До конца августа отдаем наш самый жирный ПАК из 5 фундаментальных курсов за 50 000 ₽ вместо ~250 000 ₽. Да, это ровно по 10 000 ₽ за мощнейшие программы, включая Linux CyberPunk (с официальным дипломом сисадмина!), HackerPoint (Blue/Red Team), HackerPoint 2, SQL для хакера и AI-помощники на Python. До конца акции осталось всего несколько дней (закрываем 31 августа). Отдавать такой объем знаний и официальные документы за бесценок массово - невозможно. Осталось всего 12 мест по этой цене. ❗️Как только 12 человек заберут бандл, мы досрочно закрываем продажи Жаркого лета. Это беспрецедентный шанс забрать базу пентеста и автоматизации, которая навсегда изменит твой подход к заработку в ИБ. ⏳ Врывайся в осень с новой профессией. Пиши кодовое слово "ЛЕТО" в саппорт, чтобы забрать бандл, пока есть места: 👉@cyacademy_support
date DESC, id DESC, лимит на 1000 записей и composite index по (date, id). На первый взгляд, все должно работать быстро.
Но EXPLAIN ANALYZE показывает другое: Postgres вроде бы использует Index Scan, но после этого выкидывает 900 000 строк через Filter.
То есть индекс есть, но запрос все равно тащит слишком много лишнего.
Проблема в условии:
`date < @date OR (date = @date AND id <= @lastId)`
Для разработчика это выглядит логично: сначала сравниваем дату, потом id.
Но для оптимизатора такой OR плохо ложится на composite index. В итоге база не может сразу пойти по нужному диапазону и вынуждена фильтровать огромный кусок данных.
Правильнее записать условие через tuple comparison:
`(date, id) <= (@date, @lastId)`
Смысл тот же, но для Postgres это уже понятный диапазон по составному индексу.
И результат: 298 мс превращаются в 0,66 мс.
Индекс сам по себе ничего не гарантирует.
Важно не только создать индекс, но и написать запрос так, чтобы оптимизатор реально смог его использовать.
🫡 Всё про Data Science
🇷🇺 Читайте нас в MAXSELECT COUNT(*)
FROM orders
WHERE user_id = 42;
А потом проверяют, больше ли результат нуля.
Но базе приходится посчитать все совпадения, хотя тебе нужна всего одна информация: есть хотя бы одна строка или нет.
Лучше использовать:
SELECT EXISTS (
SELECT 1
FROM orders
WHERE user_id = 42
);
EXISTS может остановить поиск сразу после первого совпадения.
На маленькой таблице разницы почти не заметишь. На миллионах строк и частых проверках это уже может серьёзно экономить ресурсы.
Если нужен ответ «да/нет» — не заставляй SQL считать всё.
🫡 Всё про Data Science
🇷🇺 Читайте нас в MAXgoto, чтобы быстро прыгать между общими ветками выполнения.
➡️ В исходниках прямо написано:
«Код использует неструктурированные goto и выглядит не очень чисто. Но это сделано не из-за плохого стиля, так быстрее».
По замерам разработчиков, такой подход ускоряет sqlite3_step() примерно на 1,5%.
То есть здесь читаемость сознательно пожертвовали ради производительности.
Хорошее напоминание: в системном коде «красивее» не всегда значит «быстрее».
🫡 Всё про Data Science
🇷🇺 Читайте нас в MAXСамое крутое – накопленными бонусами можно оплатить до 90% стоимости следующих услуг. Например, если анализы вышли на 10 000₸, то бонусами можно списать 9000!В-четвёртых. Подойдите к администратору на кассе и скажите
ИНВИТРО26. После этого вам сделают скидку 20% на первую оплату. Работает во всех городах до 15 сентября 2026 года.
Подключить повышенный кешбэк можно 👉 на сайте. Нужно авторизоваться и открыть в личном кабинете раздел «Программа лояльности». 1 бонус = 1₸.
🫡 Всё про Data Science
🇷🇺 Читайте нас в MAX
from graphforge import GraphForge
graph = GraphForge("research/")
result = graph.execute("""
MATCH (a)-[:CITES]->(b)
RETURN a.title, b.title
""")
print(result.to_pandas())
При этом GraphForge честно позиционируется как инструмент исследовательского и notebook-масштаба. Для миллиардных графов, высокой нагрузки и многопользовательского доступа по-прежнему нужна серверная БД.
Python и Node.js доступны сейчас, Swift и Kotlin находятся в планах. Лицензия — Apache 2.0.
https://github.com/CurateLabs/graphforge
🫡 Всё про Data Science
🇷🇺 Читайте нас в MAXROW_NUMBER().
SELECT
u.id,
last_order.id,
last_order.created_at
FROM users AS u
LEFT JOIN LATERAL (
SELECT id, created_at
FROM orders
WHERE user_id = u.id
ORDER BY created_at DESC
LIMIT 1
) AS last_order ON true;
LATERAL запускает подзапрос отдельно для каждой строки слева и разрешает обращаться к u.id.
Добавьте индекс:
CREATE INDEX ON orders (user_id, created_at DESC);
Тогда PostgreSQL сможет брать последнюю запись прямо из индекса, не сортируя все заказы пользователя.
Такой приём особенно полезен для задач:
⏺️ последняя операция пользователя;
⏺️ актуальный статус заказа;
⏺️ последнее событие устройства;
⏺️ последние N записей для каждой группы.
Для больших таблиц это часто быстрее и проще, чем оконная функция по всему набору данных.
🫡 Всё про Data Science
🇷🇺 Читайте нас в MAXa * b * c = exp(ln(a) + ln(b) + ln(c))То есть вместо прямого произведения считаем сумму логарифмов.
SELECT
user_id,
EXP(SUM(LN(probability))) AS total_probability
FROM events
WHERE probability > 0
GROUP BY user_id;
Где это полезно:
SELECT
user_id,
EXP(SUM(LN(conversion_rate))) AS funnel_survival_rate
FROM funnel_steps
GROUP BY user_id;
Это стандартный численный прием из математики, который делает расчет стабильнее. Особенно полезно, когда у тебя много шагов в воронке, вероятностная модель, риск-скоринг или аналитика событий. Главное правило: LN(x) работает только для x > 0, поэтому нули нужно обрабатывать отдельно. Например, если хотя бы одна вероятность равна нулю, итоговое произведение тоже будет ноль.🫡 Всё про Data Science 🇷🇺 Читайте нас в MAX
Файлы
↓
chunks + embeddings
↓
LanceDB + SQLite
↓
Knowledge Graph
↓
поиск / агенты / MCP
➡️ https://github.com/Constella-OS/constella-desktop
🫡 Всё про Data Science
🇷🇺 Читайте нас в MAX