At least for ClickBench, the remaining bottleneck is memory bandwidth. I think that's mostly going to be solved by better data representations than SIMD.
One of the biggest wins was our hash table implementation. Depending on the cardinality of the data, it switches between design that is optimized for L2 cache vs something that is outside of L2.
TigerBeetle has static allocation for their known workload.
SIMD is more useful for heavy parallel analytical workloads. There are probably returns from SIMD even for index updates on transactional inserts. SIMD is faster for: vectorized index comparisons, Vectorized Constraint Validation, Multi-Column SIMD Hashing, Masked Bitmaps for Nullable Fields, gather and scatter, string processing, casting to numeric types.
IIUC FWIW Cerebras' does not have L2 cache.
TIL Vortex is Zero-Copy compatible with Arrow;
vortex-data/vortex: An extensible, state-of-the-art framework for columnar compression, and the fastest FOSS columnar file format. Formerly at @spiraldb, now an Incubation Stage project at LFAI&Data, part of the Linux Foundation. https://github.com/vortex-data/vortex
Vortex also has Segment Profiling and Adaptive Encoding.
there's some great stuff in here, particularly the direct-to-binary codegen, threads instead of processes and sync batching. you must have some intuitive notion about where the performance gains come from.
Comments
Would there be an advantage to reusing SIMD-optimized libraries for this?
Polars Rust is built on Arrow and packed_simd.
pola-rs/polars: https://github.com/pola-rs/polars
polars - Rust API docs: https://docs.pola.rs/api/rust/dev/polars/#simd
lancedb's data format; Lancedb/lance works with [Pandas, DuckDB, Polars, PyArrow,]; https://github.com/lancedb/lance
Narwhals' df interface (Python) https://narwhals-dev.github.io/narwhals/
substrait's portable query plans: https://substrait.io/ , https://github.com/ibis-project/ibis-substrait
Arrow RecordBatch, https://news.ycombinator.com/item?id=45495738#45546244
cargo-fuzz, TLA+
At least for ClickBench, the remaining bottleneck is memory bandwidth. I think that's mostly going to be solved by better data representations than SIMD.
One of the biggest wins was our hash table implementation. Depending on the cardinality of the data, it switches between design that is optimized for L2 cache vs something that is outside of L2.
TigerBeetle has static allocation for their known workload.
SIMD is more useful for heavy parallel analytical workloads. There are probably returns from SIMD even for index updates on transactional inserts. SIMD is faster for: vectorized index comparisons, Vectorized Constraint Validation, Multi-Column SIMD Hashing, Masked Bitmaps for Nullable Fields, gather and scatter, string processing, casting to numeric types.
IIUC FWIW Cerebras' does not have L2 cache.
TIL Vortex is Zero-Copy compatible with Arrow;
Vortex also has Segment Profiling and Adaptive Encoding.
"What is Vortex? Columnar File Format Explained" https://spice.ai/learn/vortex
You should submit it to ClickBench for verification.
Done! https://github.com/ClickHouse/ClickBench/pull/1163
Thanks, merged!
there's some great stuff in here, particularly the direct-to-binary codegen, threads instead of processes and sync batching. you must have some intuitive notion about where the performance gains come from.
Port in OrioleDB next please. If our wish-granting really is at such a state. https://github.com/orioledb/orioledb
Port in OrioleDB next please. If our wish-granting really is at such a state. https://github.com/orioledb/orioledb
Great submission slipped by yesterday (!) on it's beta15 and beta16 released, on a big stability push. It now passes Postgres's own test suite! https://www.orioledb.com/blog/orioledb-beta15-16-stability https://news.ycombinator.com/item?id=49099108
Once it's stable, that's definitely something I'm going to look at doing
(supabase cofounder) reach out if you need any help integrating. contact details are in my profile