Возможно, кто-то из прочитавших заголовок скажет — зачем возиться с WAL, если есть более простые способы.
NOTIFY, например.Да, действительно, и, если вам нужно мониторить изменения в небольшой, не слишком часто обновляющейся таблице, то это отличный вариант. Но дело в том, что все уведомления
NOTIFY падают в одну очередь, и если таких уведомлений много, то они затормозят работу всей БД.Кроме того, их размер ограничен 8000 байтов, чего может быть недостаточно. А еще, если сервис-получатель был по какой-то причине не доступен и сообщение не дошло, повторное через NOTIFY не отправляется — то есть данные просто потеряются.
В общем, не идеальный вариант.
Спойлер: этот вариант тоже не идеальный. Как минимум, придется повозиться:
wal_level на logical со стандартного replica — так он начнет делать более подробные записи о том, как и что конкретно изменилось в базе. publications (то есть, расписать, какие таблицы и действия вы хотите отслеживать) и репликационный слот (то есть отдельную копию WAL, которая гарантирует, что никакие важные данные из лога не удалятся, пока уведомление не будет отправлено).Всё про Data Science
Please open Telegram to view this post
VIEW IN TELEGRAM
Этим вопросом задалась команда J'son & Partners Consulting, которая сравнила подходы к подготовке ИИ-специалистов в России, США и Китае. Во всех трех странах ключевой вызов один — образование не успевает за темпами развития технологий, поэтому важно его адаптировать.
Какие меры предпринимают:
Всё про Data Science
Please open Telegram to view this post
VIEW IN TELEGRAM
Очень часто DISTINCT добавляют просто чтобы убрать дубли после неудачного join. Запрос вроде работает, но по факту ты сначала раздуваешь результат, а потом заставляешь базу его чистить. На больших таблицах это легко убивает производительность.
Плохой вариант:
SELECT DISTINCT u.id, u.name
FROM users u
JOIN orders o ON o.user_id = u.id;
Лучше так:
SELECT u.id, u.name
FROM users u
WHERE EXISTS (
SELECT 1
FROM orders o
WHERE o.user_id = u.id
);
Почему это сильный приём:
EXISTS останавливается, как только находит первое совпадение
не нужно тащить лишние строки
не нужно потом убирать дубли
логика запроса становится честной - ты проверяешь наличие, а не собираешь мусор
Это один из самых частых hidden performance fixes в SQL. Если видишь DISTINCT, сразу спрашивай себя: он тут реально нужен или просто маскирует плохую логику JOIN.
Всё про Data Science
Please open Telegram to view this post
VIEW IN TELEGRAM
Amazon, Google, Microsoft и другие технокомпании вкладывают в ИИ огромные деньги: они выпускают все новые продукты на его основе и активно — иногда слишком — продвигают их среди клиентов и даже собственных сотрудников. Учитывая их рвение, может показаться, что это приносит им большие доходы, но, кажется, это не так. По крайней мере пока.
В плюсе пока только Nvidia, которая с 2023 заработала на ИИ-чипах 253 миллиардов. Никто больше к таким результатам даже не приблизился, и в основном все в глубоком минусе.
Выглядит не очень, но стоит учитывать три фактора:
В любом случае, выглядят данные любопытно и доля правды в них точно есть. Отсюда вопрос: как думаете, когда ИИ начнет окупаться?
Всё про Data Science
Please open Telegram to view this post
VIEW IN TELEGRAM
Интересная статья про паттерны, по которым можно выявить случаи мошенничества и подозрительной активности на банковских счетах с помощью простого
Большинство признаков, на которые надо обращать внимание, известны или интуитивно понятны, но автор еще и сами SQL-запросы показывает, и это уже может пригодиться.
Чтобы выявлять все эти сигналы было проще, автор предлагает заранее материализовать их с помощью оконных функций:
SELECT
cardholder_id,
timestamp,
amount,
merchant_id,
timestamp - LAG(timestamp) OVER w AS time_since_last,
CASE WHEN merchant_id <> LAG(merchant_id) OVER w
THEN 'changed' ELSE 'same' END AS merchant_change,
sum(amount) OVER (
PARTITION BY cardholder_id
ORDER BY timestamp
RANGE BETWEEN INTERVAL '24 hours' PRECEDING AND CURRENT ROW
) AS running_24h_total,
ROW_NUMBER() OVER (
PARTITION BY cardholder_id, date(timestamp)
ORDER BY timestamp
) AS tx_of_day
FROM transactions
WINDOW w AS (PARTITION BY cardholder_id ORDER BY timestamp)
ORDER BY cardholder_id, timestamp;
И после этого уже прогонять проверки с помощью WHERE:
SELECT *
FROM tx_with_windows
WHERE tx_of_day >= 5
AND time_since_last < INTERVAL '60 seconds'
AND merchant_change = 'changed';
Главное — не переусердствовать и помнить, что каждый сигнал по отдельности, как правило, ничего не доказывает: и обычному человеку может понадобиться снять деньги с карты несколько раз подряд или сбегать в магазин посреди ночи. Чтобы отсеять честных пользователей от мошенников, нужно смотреть на несколько параметров в совокупности.
Всё про Data Science
Please open Telegram to view this post
VIEW IN TELEGRAM
Это гибрид: Graph + Vector + Temporal MVCC в одном ядре
заточен под AI-агентов и knowledge systems
Что внутри:
Из хорошего, это не Frankenstein из разных сервисов, а единая система.
Под капотом:
То есть ты можешь:
Фактически это попытка сделать “память для AI”:
где есть связи, смысл и история изменений, а не просто таблицы.
Если делаешь RAG, multi-agent системы или сложные knowledge graph - будет полезно.
Всё про Data Science
Please open Telegram to view this post
VIEW IN TELEGRAM
Нейросеть разбирает изображение на смысловые блоки, после чего любой фрагмент можно переписать, не трогая остальное.
Модель уверенно справляется с таблицами, формулами и диаграммами, сохраняет исходные цвета, шрифты и позиции элементов. Готовый результат экспортируется в DrawIO, SVG или PowerPoint.
Проект полностью открытый, ставится локально с GitHub.
Забираем, пока не закрыли:
Всё про Data Science
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Большинство думает, что проблема в LLM или плохом промпте. На практике всё проще. Модель не видит правильные связи между таблицами.
Пример. Запрос вроде “какие издатели получили выплаты выше 5000”. Векторный поиск подтянет publisher и royalty_ledger. Всё логично. Но пропустит vendor_agreement, ту самую таблицу, которая их связывает.
В итоге SQL выглядит валидно. Но возвращает ноль строк.
Это системная проблема всех решений на embeddings. Они ищут по смыслу, но не понимают структуру базы.
Нормальный подход другой. Схему нужно рассматривать как граф.
Таблицы это узлы. Foreign keys это связи. Запрос решается не поиском похожих слов, а обходом графа и поиском join-пути.
Именно так работает QueryWeaver.
Он строит граф базы и при запросе сам находит весь путь, включая промежуточные таблицы. Даже если это цепочка из нескольких шагов.
На практике это выглядит так. В тесте с базой на 60 таблиц он разобрал 5-шаговый запрос через цепочку superpower → capability_matrix → stakeholder_registry → resource_requisition → budget_allocation.
Векторный поиск увидел только начало и конец. Всё между ними потерял, потому что “stakeholder” никак не связан по смыслу с “superpower”.
Графу на это всё равно. Он просто находит единственный путь между сущностями.
И это меняет всё.
Open-source, можно развернуть у себя и наконец получить text-to-SQL, который реально работает.
сё про Data Science
Please open Telegram to view this post
VIEW IN TELEGRAM
Очень часто DISTINCT добавляют просто чтобы убрать дубли после неудачного join. Запрос вроде работает, но по факту ты сначала раздуваешь результат, а потом заставляешь базу его чистить. На больших таблицах это легко убивает производительность.
Плохой вариант:
SELECT DISTINCT u.id, u.name
FROM users u
JOIN orders o ON o.user_id = u.id;
Лучше так:
SELECT u.id, u.name
FROM users u
WHERE EXISTS (
SELECT 1
FROM orders o
WHERE o.user_id = u.id
);
Почему это сильный приём:
EXISTS останавливается, как только находит первое совпадение
не нужно тащить лишние строки
не нужно потом убирать дубли
логика запроса становится честной - ты проверяешь наличие, а не собираешь мусор
Это один из самых частых hidden performance fixes в SQL. Если видишь DISTINCT, сразу спрашивай себя: он тут реально нужен или просто маскирует плохую логику JOIN.
Всё про Data Science
Please open Telegram to view this post
VIEW IN TELEGRAM
За год число вакансий с требованиями ИИ-навыков значительно выросло.
Работодатели всё чаще ожидают, что специалисты умеют использовать нейросети в работе.
У Яндекс Практикума есть курсы по ИИ для разных задач: от работы с нейросетями и автоматизации процессов до создания AI-агентов и разработки с помощью ИИ.
Начать можно бесплатно.
→ Освоить AI-навыки
Erid: 2SDnjeasE1x
Название: ООО "ЯНДЕКС"
ИНН: 7736207543
Работодатели всё чаще ожидают, что специалисты умеют использовать нейросети в работе.
У Яндекс Практикума есть курсы по ИИ для разных задач: от работы с нейросетями и автоматизации процессов до создания AI-агентов и разработки с помощью ИИ.
Начать можно бесплатно.
→ Освоить AI-навыки
Erid: 2SDnjeasE1x
Название: ООО "ЯНДЕКС"
ИНН: 7736207543
Лето — время начать: освойте Data Science на выгодных условиях
Хотите не просто теоретически разбираться в устройстве нейросетей, а уметь создавать их самостоятельно? Центр непрерывного образования ФКН НИУ ВШЭ предлагает присоединиться к структурированному и выстроенному практикующими экспертами обучению науке о данных.
Станьте специалистом по Data Science высокого уровня:
🟣 первая программа профессиональной переподготовки, получившая аккредитацию Альянса в сфере искусственного интеллекта;
🟣 вы пройдете весь путь: от высшей математики и программирования до нейросетей и работы с большими данными.
Программа включает курсы по ключевым дисциплинам:
🟣 Математика для анализа данных;
🟣 Алгоритмы и структуры данных;
🟣 Программирование и автоматизация;
🟣 Прикладная статистика для машинного обучения;
🟣 Машинное и глубинное обучение.
Специальное предложение для тех, кто запишется на ближайший запуск:
⭐️ Скидка 10% на обучение
⭐️ Курс по BI в подарок
📁 Старт: 30 июня.
Подробнее о программе📍
Хотите не просто теоретически разбираться в устройстве нейросетей, а уметь создавать их самостоятельно? Центр непрерывного образования ФКН НИУ ВШЭ предлагает присоединиться к структурированному и выстроенному практикующими экспертами обучению науке о данных.
Станьте специалистом по Data Science высокого уровня:
Программа включает курсы по ключевым дисциплинам:
Специальное предложение для тех, кто запишется на ближайший запуск:
Подробнее о программе
Please open Telegram to view this post
VIEW IN TELEGRAM
SQL-прием: EXISTS часто лучше, чем COUNT(*) > 0
Если тебе нужно просто проверить, есть ли строки, не заставляй базу считать их все.
Плохо:
База может пройти по всем подходящим строкам, чтобы посчитать количество.
Лучше:
EXISTS останавливается сразу, как только нашел первую подходящую строку. Для больших таблиц это может быть заметно быстрее, особенно если есть индекс по условию:
Если тебе нужен ответ “есть или нет”, используй EXISTS. COUNT(*) оставь для случаев, когда реально нужно точное количество строк.
Всё про Data Science
🇷🇺 Читайте нас в MAX
Если тебе нужно просто проверить, есть ли строки, не заставляй базу считать их все.
Плохо:
SELECT COUNT(*) > 0
FROM orders
WHERE user_id = 42;
База может пройти по всем подходящим строкам, чтобы посчитать количество.
Лучше:
SELECT EXISTS (
SELECT 1
FROM orders
WHERE user_id = 42
);
EXISTS останавливается сразу, как только нашел первую подходящую строку. Для больших таблиц это может быть заметно быстрее, особенно если есть индекс по условию:
CREATE INDEX idx_orders_user_id ON orders(user_id);
Если тебе нужен ответ “есть или нет”, используй EXISTS. COUNT(*) оставь для случаев, когда реально нужно точное количество строк.
Всё про Data Science
Please open Telegram to view this post
VIEW IN TELEGRAM
Этот график в любом современном BI-инструменте можно сделать за несколько кликов Да что BI — его можно нарисовать без особых проблем даже в обычном Экселе.
Но у автора он отнял 50 часов — больше стандартной рабочей недели. Он все нарисовал от руки, с помощью карандашей, туши, линеек и набора для леттеринга. В своем посте про этот опыт он поделился набором классических книг про визуализацию для вдохновения, списком инструментов и практическими советами: например, как нарисовать четкие, аккуратные линии.
Он рассказывает, как лучше выстроить процесс, и как работать с разными инструментами. Единственный вопрос, на который он не дает ответ — зачем вообще этим заниматься? Зачем тратить 50 часов на то, что намного проще и быстрее сделать на компьютере?
Возможно, просто из любви к искусству. В конце концов, не все нужно автоматизировать и оптимизировать — иногда можно потратить 50 часов на линейный график и просто наслаждаться процессом.
Кстати, даже если не планируете рисовать графики карандашами и чернилами, в посте есть ссылки на онлайн-версии книг, которые все еще стоят внимания. несмотря на возраст.
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Разработчик сделал тренажёр, где вы проходите уровни, находите терминалы и «взламываете» их SQL-запросами.
Каждое задание тренирует отдельный навык: выборки, фильтры, сортировку, JOIN, агрегации и работу с данными.
Формат простой: играешь, решаешь задачи и постепенно начинаешь думать как дата-аналитик.
Идеальный вариант на выходные, если давно хотели подтянуть SQL без унылой теории.
http://sqlprotocol.com/
Please open Telegram to view this post
VIEW IN TELEGRAM