8 columns × 20 row-group blocks. X = column, Z = block. Brightness = bytes actually read for this query.
⚠ Couldn't load the 3D engineThree.js failed to load from the CDN. Check your connection and reload.

Columnar vs Row Storage: Analytical Scan Cost

Every analytical query engine has to decide which bytes on disk it actually needs to touch, and that decision is dictated by the physical layout underneath the table. This simulator renders an 8-column, 20-block table as a 3D grid and lets you run the same query — a column selection plus a filter — against a row-oriented layout and a column-oriented layout side by side. Predicate pushdown skips whole blocks whose value range can't match the filter in both layouts; column pruning then lets the columnar layout skip whole columns too, while the row-oriented layout is forced to read every column of every matching block because rows are interleaved on disk. Live readouts convert the highlighted blocks into bytes scanned, blocks touched, and an estimated scan time at a fixed disk throughput, with dictionary+run-length compression applied at realistic, layout-specific ratios.