An overengineered solution to `sort | uniq -c` with 25x throughput (hist)
Проект hist-rs представляет собой высокопроизводительный утилиту для подсчета уникальных строк, написанную на Rust. Его ключевое преимущество — скорость работы, которая в 25 раз превышает производительность классической команды sort | uniq -c в Unix-системах. Это делает его идеальным инструментом для анализа больших лог-файлов и наборов данных, где важна скорость обработки.
Проект реализует эффективный алгоритм подсчета, минимизируя потребление памяти и процессорного времени. Он особенно полезен для разработчиков и системных администраторов, работающих с большими объемами текстовых данных. Код проекта открыт и доступен на GitHub, что позволяет сообществу вносить вклад в его развитие и адаптацию под различные задачи обработки текста.
Комментарии (62)
- Обсуждение началось с вопроса о производительности различных инструментов для подсчёта уникальных строк в файле, где был упомянут
clickhouse-localкак самый быстрый способ. - Участники обсуждали различные инструменты, включая
sort,uniq,awk,uniq -c,sort | uniq -c | sort -n,tsvиcsv, а также их производительность и использование памяти. - Были упомянуты такие инструменты как
tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort, `tsor
ADS-B Exposed 🔥 Горячее
Проект ADS-B Massive Visualizer представляет собой инструмент для визуализации данных системы автоматического зависимого наблюдения — вещания (ADS-B), используемой для отслеживания воздушных судов. Разработчики гордятся использованием ClickHouse — высокопроизводительной open-source СУБД, оптимизированной для аналитики больших данных в реальном времени. Визуализатор, вероятно, обрабатывает и отображает огромные объемы информации о полетах, позволяя пользователям наблюдать за перемещением самолетов в режиме реального времени.
ClickHouse выбрана не случайно — она способна обрабатывать миллионы строк в секунду, что критически важно для обработки данных ADS-B, генерируемых тысячами самолетов одновременно. Проект размещен на GitHub, что указывает на его открытый характер и возможность участия сообщества. Визуализатор демонстрирует мощь современных баз данных при работе с потоковыми данными в геопространственных приложениях, превращая сырые телеметрические данные в наглядную интерактивную карту воздушного пространства.
Комментарии (76)
- Проект визуализирует потоки ADS-B и предоставляет интерактивный доступ к данным, включая исторические данные.
- Пользователи обсуждают, какие данные доступны, какие самолёты можно отслеживать и какие ограничения есть у сервиса.
- Обсуждаются различные источники данных, включая спутниковые и наземные сети, а также вопросы покрытия и точности.
- Участники делятся ссылками на репозиторий и обсуждают, какие данные доступны и как они могут быть использованы.
- Обсуждаются вопросы безопасности и конфиденциальности, а также влияние на открытые данные и их использование.
Scaling request logging with ClickHouse, Kafka, and Vector
Геокодио перешло с MariaDB на ClickHouse, Kafka и Vector для обработки миллиардов запросов. Исходная система на MariaDB с движком TokuDB не справлялась с нагрузкой: токизация базы не обновлялась с 2021 года, производительность падала с ростом данных, а запросы к миллиардам записей приводили к таймаутам.
Новая архитектура распределяет поток данных через Kafka, который направляет их в ClickHouse для аналитики в реальном времени и долгосрочного хранения. Vector агрегирует данные перед загрузкой, что значительно ускоряет обработку.
В результате производительность увеличилась на порядки: запросы, занимавшие минуты, теперь выполняются за миллисекунды, а пользователи могут мгновенно просматривать свою статистику даже на пике нагрузки. Это решение, хоть и требовало переписывания некоторых запросов, полностью устранило проблемы с производительностью.
Комментарии (22)
- Основной вывод: авторы обсуждают, как правильно организовать поток данных от источника к ClickHouse, используя Kafka, Vector или Redis в качестве буфера.
- Практика: вместо того чтобы писать в ClickHouse напрямую, они используют Kafka как очередь, а затем Vector для буферизации.
- Архитектура: ClickHouse не предназначен для очень больших объемов вставки, и поэтому требуется внешняя система буферизации.
- Альтернативы: обсуждаются такие варианты как async insert в ClickHouse, использование Redis вместо Kafka, или применение встроенной функции async insert в ClickHouse.
LLM Observability in the Wild – Why OpenTelemetry Should Be the Standard
Разработчики сталкиваются с хаосом при отладке LLM-агентов в продакшене из-за фрагментации стандартов observability. Например, OpenAI предлагает детальные трейсы, но они привязаны к её фреймворку и не позволяют фильтровать отдельные спаны. New Relic поддерживает OpenTelemetry, но интерфейс громоздок для оперативного дебаггинга. Phoenix с OpenInference даёт богатые AI-специфичные спаны, но не полностью совместим с OpenTelemetry и не имеет SDK для Ruby, что критично для таких проектов, как Chatwoot.
Ключевая проблема — противостояние универсального OpenTelemetry (широкая поддержка языков, но базовые типы спанов) и специализированного OpenInference (богатые AI-типы, но слабая экосистема). OpenInference лишь поверхностно совместим с OpenTelemetry, приводя к «unknown» спанам при прямом использовании. Это вынуждает команды выбирать между созданием кастомных SDK, потерей контекста или сменой стека, замедляя разработку. OpenTelemetry остаётся прагматичным выбором из-за зрелости и кросс-языковой поддержки, но требует расширения семантики под AI-workflow.
Комментарии (34)
- Разработка систем наблюдения (observability) для многозадачных LLM-агентов, включая метрики сложности задач и успешности выполнения.
- Обсуждение стандартов и инструментов (OpenTelemetry, Phoenix, Clickhouse) для отслеживания семантических ошибок и трассировки выполнения агентов.
- Критика подхода к оценке через ИИ из-за проблемы "курицы и яйца" и предложения использовать стандартные системы мониторинга.
- Вопросы о практическом применении длинных промптов не-техническими пользователями и динамической маршрутизации в агентах.
- Дискуссия о необходимости совмещения стандартных решений (реляционные БД) с OpenTelemetry для богатой семантики в распределённых системах.
Optimizing ClickHouse for Intel's 280 core processors
Оптимизация ClickHouse для процессоров Intel с ультра-высоким числом ядер
Авторы: Цзебин Сань, Чжиго Чжоу, Ваньян Го, Тьянью Ли
Гостевой пост от инженеров по оптимизации производительности из Intel Shanghai.
Современные процессоры Intel достигают беспрецедентного числа ядер: до 128 P-ядер на сокет в Granite Rapids и 288 E-ядер в Sierra Forest. Многосокетные системы могут иметь более 400 ядер. Тенденция «больше ядер, а не выше тактовая частота» обусловлена физическими ограничениями и проблемами энергопотребления.
Для аналитических баз данных, таких как ClickHouse, большое количество ядер представляет как возможность, так и сложную задачу. Хотя теоретически больше ядер означают больше параллельной мощности, большинство СУБД не могут полностью использовать аппаратные ресурсы. Проблемы параллельной обработки, такие как конфликты блокировок, когерентность кэша, неоднородный доступ к памяти (NUMA), пропускная способность памяти и накладные расходы на координацию, усугубляются с ростом числа ядер.
Оптимизация для ультра-высокого числа ядер
За последние три года мы анализировали и оптимизировали масштабируемость ClickHouse на процессорах Intel Xeon с большим числом ядер. С помощью инструментов профилирования (perf, emon, Intel VTune) мы исследовали все 43 запроса ClickBench на серверах с ультра-высоким числом ядер, выявляли узкие места и оптимизировали ClickHouse.
Результаты впечатляют: отдельные оптимизации ускоряют выполнение запросов в несколько раз, в некоторых случаях до 10x. Среднее геометрическое время выполнения всех запросов стабильно улучшалось на 2–10% для каждой оптимизации. Это демонстрирует, что ClickHouse можно эффективно масштабировать на системах с ультра-высоким числом ядер.
Ключевые проблемы масштабирования
Помимо производительности одного ядра, необходимо решить несколько ключевых задач:
- Накладные расходы когерентности кэша: Перемещение строк кэша между ядрами требует циклов CPU.
- Конфликты блокировок: Даже небольшие последовательные участки кода (1%) сильно ограничивают параллелизм по закону Амдала.
- Пропускная способность памяти: Эффективное использование памяти критично для систем с интенсивной работой с данными.
- Координация потоков: Стоимость синхронизации потоков растет сверхлинейно с их количеством.
- Эффекты NUMA: Задержки и пропускная способность памяти различаются для локальной и удаленной памяти в многосокетных системах.
В этом посте summarized наши оптимизации ClickHouse для серверов с ультра-высоким числом ядер.
Комментарии (46)
- Исправление опечатки в заголовке: речь идёт о 288-ядерных серверных процессорах Intel Sierra Forest, а не о "Intel 280".
- Оптимизация ClickHouse под высокоядорные системы: улучшение аллокаторов памяти, борьба с конкуренцией, использование SIMD-фильтрации (ускорение запросов до 35%).
- Обсуждение технических деталей процессоров: отсутствие AVX-512 на E-ядрах Sierra Forest, наличие AVX2 VNNI, сравнение с AMD Zen 4c.
- Проблемы масштабирования: сложности NUMA, contention points на уровне аллокаторов, разделение полосы пропускания памяти.
- Практический опыт использования ClickHouse: высокая эффективность сжатия и скорость агрегации больших данных (миллиарды снэпшотов).
- Критика и предложения: переход с jemalloc на современные аллокаторы (TCMalloc, mimalloc), использование оптимистичного контроля параллелизма.
- Исторический и футуристический контекст: сравнение с устаревшими системами, шутки о запуске 1000 виртуальных машин и размещении целого стойка в одном процессоре.
Vector database that can index 1B vectors in 48M
Зачем и как мы сделали Vectroid
Почти все векторные БД заставляют выбирать: скорость, точность или цена. Мы решили, что жертвы не нужны, и собрали serverless-решение, где всё хорошо одновременно.
Ключевая идея:
- нагрузка скачет ⇒ ресурсы выделяем динамически;
- алгоритм HNSW жрёт память, но его можно «сплющить» квантованием и развернуть обратно при необходимости.
Что умеет Vectroid
- Поиск по HNSW: 90 % recall при 10 QPS и P99 = 34 мс (MS Marco, 138 M векторов).
- Индексация 1 M векторов в минуту, 1 B — за 48 мин.
- Записи становятся видны почти сразу после вставки.
- Масштаб до миллиардов векторов в одном пространстве.
- Пишущая и читающая части масштабируются отдельно, данные живут в GCS/S3, индексы подгружаются лениво и выгружаются при простое.
Архитектура
Два независимых микросервиса: ingest и query. Все слои (вставка, индекс, поиск) масштабируются отдельно, память экономится квантованием и покадровой выгрузкой.
Попробовать бесплатно — 100 ГБ индексов навсегда.
Комментарии (41)
- Предложена идея «векторного движка» как лёгкой встраиваемой библиотеки для быстрого построения и поиска эмбеддингов, без переизобретения велосипеда в каждом продукте.
- Участники спорят о масштабируемости: 1 млрд 4096-мерных векторов теоретически невозможно держать в одной VRAM-карте (4 Т скаляров), но можно разбить на кластеры или сжать квантованием.
- Ключевой вызов — не алгоритм (HNSW/IVF), а распределённая архитектура: отдельное масштабирование записи и чтения, баланс цена-точность-латентность.
- Уже есть похожие open-source решения (USearch в ClickHouse, TurboPuffer), но новые SaaS-продукты (Vectroid и др.) обещают серверлесс, объектное хранилище и «редисо-подобный» кэш.
- Часть аудитории критикует закрытость кода и риск вендор-локина; стартапы отвечают, что opensource пока замедляет релизы, а вектора легко экспортировать.
Data engineering and software engineering are converging
Кратко:
Инженеры, создающие realtime-аналитику или AI-функции, нуждаются в инфраструктуре данных с современным developer experience (DX). MooseStack от 514 — open-source DX-слой для ClickHouse.
Слияние дисциплин
Классические хранилища и озёра строились для аналитиков: SQL, BI-дашборды. Теперь же realtime-данные встроены в продукты и AI-функции, а команды разработки обязаны поставлять их так же быстро, как и обычный код.
- Транзакционные БД (Postgres, MySQL) хороши для разработки, но проваливаются при аналитических нагрузках.
- Облачные аналитические платформы (Snowflake, BigQuery) удобны для пакетных ETL, но не обеспечивают свежесть данных и sub-second ответов, а DX в них устарел.
UX-разрыв
Пользователи хотят аналитику за миллисекунды. ClickHouse решает задачу: на порядки быстрее Postgres и дешевле Snowflake/Databricks.
DX-разрыв
Разработчики привыкли к локальному циклу «код → тест → CI/CD». В мире данных такого нет: нет локального окружения, медленные итерации, конфликты между data- и software-инженерами.
MooseStack
514 выпустили MooseStack — open-source DX-слой поверх ClickHouse:
- Git-native, local-first, everything-as-code.
- Единый язык схем и запросов для всех специалистов.
- Поддержка CI/CD, preview-окружений, автотестов.
Комментарии (50)
- Сторонники «чистого» инженерного подхода считают, что data engineering изначально был частью software engineering, но позже к нему примешались аналитики, знающие лишь SQL/DBT.
- В сообществе виден раскол: одни DE пишут Terraform, CI/CD, Spark и k8s, другие ограничиваются ноутбуками, SQL-запросами и no-code-инструментами.
- Критика Python и SQL как «недостаточно инженерных» языков: динамическая типизация, отсутствие строгих схем и нормального тестирования.
- Название роли «Data Engineer» стало размытым: HR ищут «писателей SQL», а специалисты просят называть их «Software Engineer, Big Data» или «Platform Engineer».
- Сильные практики уже давно используют IaC, версионирование, code review и полноценный SDLC, но таких меньшинство.
ClickHouse matches PG for single-row UPDATEs and 4000 x faster for bulk UPDATEs
ClickHouse vs PostgreSQL: UPDATE-скорость
- Коротко: на одном железе ClickHouse догоняет PostgreSQL в одиночных UPDATE и в 4 000 раз быстрее при массовых.
- Почему: колоночное хранилище + параллелизм ClickHouse выигрывает у строкового PostgreSQL при поиске и перезаписи миллионов строк.
- Но: PostgreSQL всегда транзакционен; ClickHouse — нет, поэтому сравнение по «родным» режимам, а не по ACID.
Что мерили
- 1 строка:
UPDATE orders SET status='shipped' WHERE id=1234567 - 1 млн строк:
UPDATE orders SET discount=0.1 WHERE order_date<'2023-01-01'
Аппаратура
- c6i.8xlarge (32 vCPU, 64 ГБ RAM, gp3 SSD)
- PostgreSQL 16.4 (дефолт +
fillfactor=90,checkpoint_timeout=30 min) - ClickHouse 25.7 (дефолт)
Результаты
| метрика | PostgreSQL | ClickHouse |
|---|---|---|
| 1 строка, мс | 0.12 | 0.11 |
| 1 млн строк, сек | 120 | 0.03 |
| CPU, % | 100 | 2800 |
| чтение, ГБ | 30 | 0.8 |
Почему так
- Поиск: ClickHouse читает только нужные колонки, фильтрует за счёт индексов и распараллеливает на все ядра.
- Запись: обе СУБД пишут новые версии строк (MVCC), но PostgreSQL переписывает целые страницы, а ClickHouse — только изменённые куски колонок.
- Фоновая работа: PostgreSQL ждёт checkpoint’а, ClickHouse сразу сортирует и сжимает куски.
Когда выбирать
- Нужны транзакции и row-level locks → PostgreSQL.
- Нужны массовые обновления аналитических данных → ClickHouse.
Код и данные
Комментарии (33)
- ClickHouse показывает огромный выигрыш в скорости обновлений, но это «яблоки-к-апельсинам»: PostgreSQL по умолчанию полностью транзакционен, а CH — нет.
- Если данные можно терять или обновления редки, CH идеален; если нужна строгая согласованность, PostgreSQL остаётся безальтернативным.
- Многие пользователи CH считают обновления адом: приходится использовать ReplacingMergeTree, версии или event-sourcing; прямых UPDATE-ов до недавнего времени вообще не было.
- Часть комментаторов предлагает сравнивать CH с DuckDB, Vertica или ScyllaDB, а также настроить PostgreSQL (synchronous_commit = off, COPY) для более честного бенчмарка.
- Авторы поста подчёркивают: цель не «победить» PostgreSQL, а показать, как каждая СУБД решает задачу в своей «родной» модели исполнения.