Открытый канал ID 68836113511920

Типичный программист | IT, программирование, разработка, ИИ

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

Другие каналы: https://max.ru/id165042823905_biz

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

Сайт: tprg.ru/site

Разместить рекламу: t.me/tproger_sales_bot

VK: vk.com/tproger

TG: t.me/tproger

Каналов в рубрике
4 770
Место этого канала
№ 358
Открыть рубрику →
Каналов в рубрике
1 733
Место этого канала
№ 94
Открыть рубрику →
Открыть в MAX

Публикации за период

По реакциям

Поиск и вся лента — после бесплатной регистрации. Свои даты — по подписке; владелец канала видит их бесплатно. Сортировка по реакциям — по подписке. Зарегистрироваться

Загрузка…

Axiom ускорила сортировку колонок в 2–26 раз с помощью разных алгоритмов

Если в колонке всего 15 разных значений, зачем снова и снова сравнивать их при сортировке? В Axiom заменили общую сортировку Go алгоритмами, которые учитывают, как хранятся данные.

Для колонок с максимум 15 значениями задали порядок значений и распределили строки по группам за один проход. Это дало ускорение в среднем в 26 раз. Для текста сначала отсортировали словарь уникальных строк, затем сортировали строки таблицы по числовым рангам. Пропуски значений вынесли в отдельную группу, чтобы не проверять их при каждом сравнении.

В разборе Axiom показано, как объединить эти алгоритмы интерфейсом Sortable: движок вызывает один метод, а колонка выбирает способ сортировки. Ускорения измерены на блоках из 65 тысяч строк на Apple M4 и относятся к сортировке, а не запросам целиком.
Просмотры: 191
Перейти в пост Открыть в MAX Сообщить о неточности
Сортировку ускорили в 26 раз. Общий алгоритм просто знал слишком мало

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

Команда дала каждому типу колонки свою реализацию. Для enum сначала упорядочили небольшой словарь, затем разложили строки по счётчикам. Для строк начали сортировать ранги словаря, не сравнивая один и тот же текст снова и снова.

На блоках примерно по 65 тысяч строк, на Apple M4, ускорение разных типов составило 2–26 раз. Максимум достался enum. Это не обещание ускорить любую сортировку: выигрыш появился там, где данные уже имели полезную структуру. Её не пришлось придумывать, достаточно было перестать терять при каждом сравнении.
Просмотры: 164
Перейти в пост Открыть в MAX Сообщить о неточности
Сколько памяти стоит пять лет развития libcurl

Новые функции добавляются по одной, и расход памяти может расти так же незаметно. Дэниел Стенберг сравнил libcurl с версией пятилетней давности: при загрузке файла на 512 МБ по HTTP пиковая память выросла на 1,6%, а число выделений памяти на 11%.

Чтобы ловить случайный рост раньше, в тесты curl добавили проверку размеров 15 структур. У каждой есть верхний предел: превысили его, тест падает. Ради новой функции лимит можно пересмотреть, но увеличение уже придётся заметить.

В разборе есть сравнение размеров структур и графики памяти на конкретной нагрузке. Замеры сделаны без шифрования: при HTTPS библиотека шифрования добавляет свои выделения памяти, которые здесь не учитываются.

#opensource
Просмотры: 172
Перейти в пост Открыть в MAX Сообщить о неточности
Пять лет новых функций. Сколько памяти теперь ест libcurl?

Обычно от такого сравнения ждёшь грустного графика. Дэниел Стенберг, автор curl, сопоставил libcurl 7.75.0 и 8.19.0-DEV и получил смешанную картину: структура одного соединения уменьшилась с 1472 до 912 байт, а две другие выросли.

Для десяти передач и двадцати открытых соединений сумма этих трёх структур оказалась на 10 000 байт меньше. Но при скачивании одного файла на 512 МБ пик памяти вырос на 1,6%, а число аллокаций увеличилось с 96 до 107. Один красивый показатель тут легко спрятал бы второй.

В тестах curl теперь есть проверка размеров пятнадцати важных структур. Превысил лимит — сборка упала, дальше приходится объяснять рост. Замеры Стенберга сделаны на Linux с HTTP без TLS. Память криптографической библиотеки в эту историю не входит.
Просмотры: 177
Перейти в пост Открыть в MAX Сообщить о неточности
Сжатие временных рядов в Axiom: меньше места на диске, больше работы процессору

Gorilla сжимает измерения по мере поступления и требует строгого порядка по времени. У клиентов Axiom каждую секунду приходят тысячи опоздавших точек. В разборе альтернативы Gorilla команда показывает, как хранить такие данные и сколько это стоит.

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

На данных Axiom хранилище обычно занимает 30–50% от размера Gorilla. Но оптимизированная Gorilla примерно в 15 раз эффективнее по CPU, то есть затратам процессора на кеш. Память кеша чаще составляет 70–100% от Gorilla; все цифры зависят от нагрузки.

#облака
Просмотры: 189
Перейти в пост Открыть в MAX Сообщить о неточности
▶ видео
Gran Turismo 4 переехала в Chrome — с гонками, звуком и сохранениями

В PS2 Web Recomp старые игры запускают прямо во вкладке. Gran Turismo 4 проходит меню и гонки, играет музыку и сохраняет прогресс в браузере. По замерам автора, PAL-версия держит 50 FPS в Chrome на встроенной графике ноутбука при удвоенном разрешении PS2.

Машинный код игры заранее переводят в C++, затем собирают в WebAssembly. Графику рисует WebGPU, а окружение воспроизводит нужные части системы и железа PS2. После Gran Turismo автор запустил God of War II: вторая игра помогла найти ошибки, которых первая не замечала.

📎 В репозитории проекта есть код, скрипты сборки и подробности оптимизации. Готового каталога игр здесь нет: понадобится свой образ диска, который скрипты превратят в локальную веб-страницу.
Просмотры: 179
Перейти в пост Открыть в MAX Сообщить о неточности
Миллион запросов в секунду напрямую: разбор клиентской балансировки Zalando

Пакетный запрос к сервису товаров Zalando разветвлялся на 100 параллельных вызовов через общий маршрутизатор Skipper. Весь пакет ждал самого медленного ответа, а причину скачков задержки было трудно отделить от проблем кода сервиса.

Команда перенесла выбор адресата в вызывающее приложение. На пике со Skipper сняли свыше миллиона запросов в секунду. При этом обе схемы направляли запросы одного товара к тем же экземплярам сервиса: иначе кеши разделились бы, а нагрузка на базу выросла.

В разборе миграции показано, как переключали трафик от 1% до 100%, сохраняя резервный путь через Skipper. Новым экземплярам постепенно добавляли нагрузку, прогревая кеши именно теми товарами, которые они будут обслуживать дальше.

#облака
Просмотры: 198
Перейти в пост Открыть в MAX Сообщить о неточности
Как метрики помогли найти ошибку в ИИ-оценщике размера видео

Cliparr обещал один размер видео, а после конвертации получался другой: в 16 замерах файлы оказались на 30–83% больше прогноза. ИИ написал формулу, которая уменьшала ожидаемый размер пропорционально высоте кадра, хотя при заданном битрейте расчёт должен опираться на длительность.

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

В материале есть код сбора метрик и настройка панели. Замеры идут из публичного браузерного конвертера, сами видео, имена файлов и адреса на сервер не отправляются.

#ии #веб
Просмотры: 196
Перейти в пост Открыть в MAX Сообщить о неточности
Замена Redis на MySQL в Shopify: устройство резервов и поиск дефицита соединений

На время оплаты Shopify резервирует товары, чтобы два покупателя не забрали последнюю единицу. Перенос резервов в MySQL позволил списывать товар и снимать резерв одной транзакцией. Но первые попытки упирались в конкуренцию за одну строку с количеством товара.

Команда завела строки для отдельных единиц, ограничив запас 1000 строк на товар и место хранения. SKIP LOCKED позволяет при резервировании пропускать заблокированные строки и выбирать свободные.

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

#веб
Просмотры: 210
Перейти в пост Открыть в MAX Сообщить о неточности
Вся лента — после бесплатной регистрации
ВКонтакте Телеграм Одноклассники
Избранное в datool.ru

Следите за каналом в личном кабинете

Зарегистрируйтесь в datool.ru, чтобы добавить канал «Типичный программист | IT, программирование, разработка, ИИ» в избранное и отслеживать его показатели.

Зарегистрироваться
Для владельцев каналов

Подтвердите свой канал

Войдите или зарегистрируйтесь в datool.ru, затем добавьте нашего бота в канал по инструкции в личном кабинете. После проверки владения замок исчезнет и вам станет доступно управление каналом.

Войти или зарегистрироваться

Сообщить о неточности

Опишите, что нужно исправить. Если есть источник, добавьте ссылку.

Вы покидаете datool.ru

Ссылка ведёт на внешний сайт. datool.ru не отвечает за его содержимое — проверьте адрес, прежде чем вводить пароли или платёжные данные.

Переход через 10 с

Перейти