Data Analysis / Big Data
2.75K subscribers
611 photos
4 videos
2 files
3K links
Лучшие посты по анализу данных и работе с Big Data на русском и английском языке

Разместить рекламу: @tproger_sales_bot

Правила общения: https://tprg.ru/rules

Другие каналы: @tproger_channels
Download Telegram
Пятнадцать минут простоя ClickHouse не должны стоить вам пропущенных событий

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

NATS JetStream закрывает разрыв. В базовом NATS сообщение живёт до первого получателя, в JetStream поток пишется на диск и ждёт подтверждения от консьюмера. База поднялась через 15 минут — консьюмер дочитывает пропущенное с последней подтверждённой позиции. Вместо дыры в данных отставание, которое рассасывается само.

В разборе пайплайна для аналитики свопов Solana показана вторая половина: схема таблицы solana_swaps в ClickHouse и то, как один поток разводится на историческую аналитику и на живую отдачу в WebSocket.

А чем вы прикрываете аналитическую базу на время миграций?
9 млрд генетических изменений собрали в карту на 1 ПБ

Для каждого возможного односимвольного изменения в геноме человека уже рассчитан прогноз влияния на молекулярные процессы. В AlphaGenome Atlas лежат 9 млрд таких прогнозов, которые можно быстро запрашивать без повторного расчёта модели.

Чтобы не перебирать тысячи показателей, индекс влияния варианта AVI объединяет прогнозы для кодирующих и некодирующих участков ДНК. На данных 54 000+ участников UK Biobank группировка по ожидаемому молекулярному эффекту помогла найти на 22% больше связей в некодирующих участках.

Для ML-практика здесь полезен сам паттерн: массовый предварительный расчёт, единая оценка и быстрый отбор кандидатов для дальнейшего исследования.
Полезная ML-модель может затеряться в соседнем домене

Эмбеддинги Netflix, созданные для студийных процессов, находят границы сцен, визуальные переходы и структуру видео. Эти числовые представления контента потенциально пригодились бы рекламе для подбора объявления под контекст, а рекомендательной системе — для сопоставления темы или настроения эпизода с интересами зрителя.

Переиспользованию мешает видимость. У доменов разные стеки, бизнес-метрики и оргструктуры; без инфраструктуры поиска наработки превращаются в чёрные ящики, недоступные другим ML-командам.

В Netflix TechBlog разбирают, зачем компании понадобился граф жизненного цикла моделей. Для своей ML-платформы стоит проверить: найдёт ли соседняя команда подходящую модель до того, как обучит свою?
Единый API может убрать маршрутизацию моделей из ваших микросервисов

Запросу рекомендательной системы мало попасть в модель: нужно выбрать нужную версию, экземпляр и шард кластера с учётом пользователя и сценария. При этом клиентскому сервису не обязательно знать устройство платформы инференса.

В Netflix эту границу провели через единый доменно-независимый API. Платформа сама направляет трафик к нужному экземпляру модели и шарду. По данным за 2025 год, так она обслуживала сотни типов и версий моделей и 1 млн запросов в секунду. Архитектуру подробнее разбирают в Netflix TechBlog.

Для своей платформы полезно разделить ответственность так же: доменный сервис знает единый контракт, а платформа выбирает тип и версию модели, экземпляр и шард. Тогда исследователи могут быстрее выпускать новые версии, не раскрывая сервисам детали маршрутизации.
Redshift сводит SQL-запросы к хранилищу и озеру данных в один движок

Таблицы хранилища и файлы в озере данных теперь можно запрашивать через один SQL-движок Redshift. Новые инстансы RG на AWS Graviton обрабатывают нагрузки хранилища до 2,2 раза быстрее RA3, а цена одного виртуального процессорного ядра у них на 30% ниже.

Встроенный движок выполняет SQL-запросы сразу по хранилищу и озеру. По данным Amazon Web Services, на данных Apache Iceberg ускорение относительно RA3 достигает 2,4 раза, на Apache Parquet — 1,5 раза. Это рассчитано в том числе на поток запросов от ИИ-агентов.

Для выбора размера есть прямые пары: вместо ra3.xlplus предлагается rg.xlarge с 4 виртуальными ядрами и 32 ГБ памяти, вместо ra3.4xlarge — rg.4xlarge с 16 ядрами и 128 ГБ. Перед миграцией стоит прогнать собственные SQL-нагрузки: все показатели AWS заявлены как «до».
У Kimi K3 2,8 трлн параметров, но один токен использует 104 млрд

Общий размер модели плохо описывает объём вычислений на токен. В Kimi K3 маршрутизатор почти в каждом слое активирует для него 16 из 896 специализированных блоков нейросети, которые называют экспертами. Ещё два общих эксперта обрабатывают каждый токен.

Архитектура со смесью экспертов сокращает вычисления на токен, но не убирает инфраструктурные расходы. Веса выбранных экспертов всё равно нужно читать из памяти графических процессоров, а представления токенов могут передаваться между ними.

В разборе freeCodeCamp сравнивают Mixtral, DeepSeekMoE, LatentMoE и Kimi K3: как эксперты становились мельче, зачем сжимали маршрутизируемый путь и чем стабилизировали обучение. При сравнении таких моделей смотрите на активные параметры, то есть задействованные для одного токена, и на перемещение данных.
Апсерт в справочник не возвращает id при конфликте: чем это чинят в Postgres 19

Наполнение dimension-таблиц упирается в одно и то же: вставить строку, если её ещё нет, и в любом случае забрать её id для фактовой таблицы. INSERT ... ON CONFLICT DO NOTHING RETURNING id отдаёт строку только тогда, когда вставка действительно произошла. Если строка уже есть, в результате ноль записей, и в dbt-модели или Airflow-таске появляется второй SELECT либо CTE, склеивающий вставленное с найденным.

Разбор синтаксиса грядущего Postgres 19 смотрит, чем в новой версии выражать этот get-or-create, и какие ещё мелкие правки синтаксиса экономят по несколько строк SQL на запрос.

Если ваши пайплайны наполняют справочники именно так, есть смысл посмотреть заранее: переписывать такие места удобнее один раз, до апгрейда.
1
Баланс кошелька можно не хранить: он считается из append-only журнала операций

Изменяемая колонка ломается на гонке: два процесса читают 100, оба пишут 150, одно списание исчезает. В разборе маркетплейса на Go и Postgres такой колонки нет: есть журнал, куда строки только добавляются, а баланс выводится агрегатами:
• total = sum(grant, credit) - sum(debit);
• reserved = sum(reserve) - sum(release);
• available = total - reserved.

Корректность автор не отдал коду сервиса: мьютекс и лок в Redis не переживают второй инстанс и не откатываются вместе с транзакцией. Каждая операция с деньгами укладывается в одну транзакцию Postgres, конфликтующие части сериализует СУБД.

Аналитике это экономит слой: история движений уже в таблице, пересчёт задним числом делается запросом. Цена — агрегат на каждое чтение баланса.

Как считаете деньги у себя: агрегат на лету или снапшот с досчётом?
Низкий балл новой модели может оказаться ошибкой тестового стенда

Модель с открытыми весами провалила проверку. Это ещё не доказывает, что она слабее текущей: причиной могут быть сломанный шаблон запроса, неверные эталонные ответы или функция оценки, которая ищет не те слова.

За 60 минут практикум предлагает собрать на Python три тестовых задания, оценку по ключевым словам и файл JSONL, где каждый ответ занимает отдельную строку. Контрольный тест проверяет сам стенд. Результат: запускаемый скрипт и статический HTML-отчёт для команды.

В практикуме на DEV Community остались настройка библиотеки OpenAI, запуск через бесплатный API MonkeyCode и публикация отчёта на бесплатном сервере. Это промоматериал MonkeyCode. В августе 2026 года бесплатный тариф включал 10 млн токенов; перед запуском сверьте квоту и адрес сервиса в README.
Числовые статусы упрощают миграции и прячут смысл данных

В витрине код 3 непонятен без словаря. SQL-запросы и дашборды зависят от таблицы соответствий; её расхождение с базой даёт тихую ошибку.

В MySQL новый элемент в середине перечисления enum может переписать всю таблицу с блокировкой и запасом диска размером с неё. В PostgreSQL enum хранится отдельным типом: ADD VALUE меняет каталог без переписывания таблицы, а значение занимает 4 байта.

Цена: значение трудно удалить, тип не переносится между СУБД и не годится для изменчивого набора или значений с метаданными. В статье на DEV Community сравнивают enum, числа и таблицу-справочник.

Где у вас граница между этими вариантами, и что уже ломалось при смене статуса?
Визуальный поиск получил энкодер на 51 страницу в секунду

Визуальный поиск по документам часто использует отдельный энкодер изображений и языковой декодер, хотя генерировать текст не нужно. NeoMME заменяет их одним двунаправленным трансформером: он превращает текст и фрагменты изображения в векторы.

Версия на 260 млн параметров при 2048×2048 на NVIDIA L40S кодирует около 51 страницы в секунду, вдвое быстрее ColModernVBERT в тех же условиях. Объединение токенов и квантование уменьшают индекс с 1,5 МБ до 6 КБ на страницу, сохраняя более 95% исходного качества первых десяти результатов по nDCG.

Модели на 260 млн и 800 млн параметров доступны в Hugging Face Transformers под Apache 2.0. Если индекс ограничивает поиск по большому архиву, стоит прогнать NeoMME на своей коллекции.
А вы уже забрали свой подарок ко Дню программиста?

Мы в Tproger вместе с нашими друзьями собрали целую коробку подарков к вашему профессиональному празднику. Переходите по ссылке, трясите коробку и забирайте свой презент: https://tprg.ru/2CiK
Мы вернулись из Суздаля с новым взглядом на магазин у дома

Были на tech-туре MAGNIT TECH «Без предела: Исходный код ритейла» и нам понравилось, как сошлись место и тема. Сначала купеческие ряды Суздаля, затем разговор о технологиях современной торговли на ГЭС на Нерли. В программе были и воздушный шар, и общение с инженерами у самовара. Получилась поездка, в которой было время и Суздалем полюбоваться, и познакомиться с людьми, стоящими за проектами.

Из выступлений особенно запомнился доклад Максима Покусенко о прогнозировании спроса. 17 млрд прогнозов ежедневно впечатляют, когда понимаешь связь с совершенно обыденной, казалось бы, вещью: приходишь в магазин, а нужный товар лежит на полке. Доклад помог увидеть, сколько расчётов стоит за этим привычным удобством.

Презентацию советуем посмотреть и тем, кто не работает с ритейлом. На одном понятном примере здесь можно проследить, как результат ML-модели становится решением о поставке.
Как Netflix дробит широкие партиции Cassandra для временных рядов

В системе Netflix обычное чтение занимает единицы миллисекунд, но широкие партиции растягивают его до секунд. События одного временного ряда копятся, вызывая тайм-ауты, загрузку процессора и очереди потоков.

Фоновый процесс анализирует размеры партиций Cassandra 4.x. Если проблема затрагивает отдельный идентификатор, сервер замечает её при чтении и отправляет событие в Kafka. Планировщик вычисляет схему разбиения, сохраняет контрольные точки, а результат проверяется сравнением контрольных сумм.

Готовые части читаются параллельно, а фильтр Блума подсказывает серверу, куда направить запрос. Разбор Netflix Technology Blog показывает архитектуру целиком и объясняет её ограничения: пока автоматически делятся только неизменяемые партиции.
1
Как спланировать A/B-тест интерфейса и выбрать вариант по данным

Вариант A дал 5% конверсий, вариант B — 6%. До запуска выберите основной показатель и защитные метрики, сформулируйте гипотезу и меняйте один элемент интерфейса. Трафик можно распределять через Optimizely или флаги функций.

Схема A/B-теста охватывает цель и метрики, гипотезу, эксперимент и анализ. После сбора данных оцените статистическую уверенность через p-value или байесовский метод, затем внедрите победивший вариант либо оставьте исходный.
Как Netflix обслуживает графы со скоростью около 10 млн операций в секунду

Graph Abstraction в Netflix работает с 650 ТБ графовых данных и возвращает обходы за миллисекунды.

Архитектура Graph Abstraction хранит актуальные узлы и рёбра в Key-Value Abstraction, исторические состояния подключает через TimeSeries Abstraction, а EVCache снижает задержку чтения. Строгая схема отсеивает некорректные записи и невозможные пути ещё при планировании запроса.

Цена пропускной способности: ограниченная сложность и глубина обходов, допустимая задержка согласованности. Связи и их свойства хранятся раздельно, поэтому обновления не атомарны. Разбор пригодится при проектировании графового слоя для потоковых систем, где задержка важнее произвольных аналитических запросов.
Как настроить параллельные процессы PostgreSQL для тяжёлых сканов

Для таблицы на 270 МБ значение max_parallel_workers_per_gather = 64 не даст 64 процессов: планировщик выбирает их число по ожидаемному объёму чтения, а параметр задаёт верхнюю границу.

max_parallel_workers ограничивает уже запущенные процессы во всём кластере. Начинайте настройку с max_worker_processes: учтите запросы, репликацию, расширения и резерв.

В PostgreSQL 18 нехватку пула покажут счётчики запрошенных и запущенных процессов. В ранних версиях сравнивайте Workers Planned и Workers Launched в EXPLAIN ANALYZE.