Skip to content
Opensource internals
  • Posts

Clickhouse

ClickHouse's PODArray Pads 64 Bytes for SIMD and Zeroes the Element at Index -1

Oct 16, 2026 26 min read Jay Hubbert

Every ClickHouse column is one flat PODArray, padded 64 bytes on both sides.

ClickhousePerformanceInternalsMemorySimd

Read more →

ClickHouse's Sparse Column: Only the Rows That Differ, and Offsets Run-Length Encoded as Gaps

Oct 16, 2026 20 min read Jay Hubbert

A sparse column stores only the rows that differ from the default, plus a sorted offsets array.

ClickhousePerformanceInternalsMemoryCompression

Read more →

ClickHouse's Variant Column: Tag Bytes, Offsets, and a Type Map That Grows at Runtime

Oct 16, 2026 19 min read Jay Hubbert

A Variant column is a struct of arrays — one sub-column per alternative, one tag byte per row, one offset per row.

ClickhousePerformanceInternalsMemoryTypes

Read more →

ClickHouse Splits GROUP BY into 256 Buckets: Top Hash Bits Route, Low Bits Index

Oct 16, 2026 15 min read Jay Hubbert

A GROUP BY needs a serial merge at the end — and that’s where the memory high-water mark lives.

ClickhouseInternalsHash tableAggregationParallelism

Read more →

ClickHouse Runs a Query as a Graph of Processors: Status Codes and One-Slot Mailboxes

Oct 16, 2026 20 min read Jay Hubbert

ClickHouse doesn’t call operators in a fixed order. Every processor reports a status — ‘I need data’, ‘my output is full’, ‘call my work()’ — and the executor walks the…

ClickhouseInternalsQuery executionConcurrency

Read more →

← Newer Page 19 of 21 Older →

© 2026 Jay Hubbert · Built with Hugo 0.168.0

RSS ·