Data Science: SQL и Аналитика данных
№ 6205468675 На простом языке: про работу с данными, современные технологии, AI, машинное обучение и, немного, SQL. Сотрудничество: @niktwix Менеджер: @Spiral_Yuri
Mostrar más📈 Análisis del canal de Telegram Data Science: SQL и Аналитика данных
El canal Data Science: SQL и Аналитика данных (@pizdatascience) en el segmento lingüístico de Ruso es un actor destacado. Actualmente la comunidad reúne a 34 378 suscriptores, ocupando la posición 3 765 en la categoría Tecnologías y Aplicaciones y el puesto 18 477 en la región Rusia.
📊 Métricas de audiencia y dinámica
Desde su creación el невідомо, el proyecto ha mostrado un crecimiento acelerado, reuniendo a 34 378 suscriptores.
Según los últimos datos del 15 septiembre, 2026, el canal mantiene una actividad estable. En los últimos 30 días la variación de miembros fue de -1 285, y en las últimas 24 horas de 11, conservando un alto alcance.
- Estado de verificación: No verificado
- Tasa de interacción (ER): El promedio de interacción de la audiencia es 17.53%. Durante las primeras 24 horas tras publicar, el contenido suele obtener 14.88% de reacciones respecto al total de suscriptores.
- Alcance de las publicaciones: Cada publicación recibe en promedio 6 042 visualizaciones. En el primer día suele acumular 5 131 visualizaciones.
- Reacciones e interacción: La audiencia responde de forma activa: el promedio de reacciones por publicación es 0.
- Intereses temáticos: El contenido se centra en temas clave como sql, индекс, sqlite, строка, index.
📝 Descripción y política de contenido
El autor describe el recurso como un espacio para expresar opiniones subjetivas:
“№ 6205468675
На простом языке: про работу с данными, современные технологии, AI, машинное обучение и, немного, SQL.
Сотрудничество: @niktwix
Менеджер: @Spiral_Yuri”
Gracias a la alta frecuencia de actualizaciones (últimos datos recibidos el 16 septiembre, 2026), el canal mantiene la vigencia y un amplio alcance. La analítica demuestra que la audiencia interactúa activamente con el contenido, lo que lo convierte en un punto de referencia dentro de la categoría Tecnologías y Aplicaciones.
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