Live data from Hacker News

Show HN: Vortex – a high-performance columnar file format

github.com

21–30 of 62 posts

Re: Show HN: Vortex – a high-performance columnar file format

#21

> One of the unique attributes of the (in-progress) Vortex file format is that it encodes the physical layout of the data within the file's footer. This allows the file format to be effectively self-describing and to evolve without breaking changes to the file format specification. That is quite interesting. One challenge in general with parqet and arrow in the otel / observability ecosystem is that the shape of data…

If it's in the footer, then I'm pending to the columns out of the question it seems without moving the footer.

Re: Show HN: Vortex – a high-performance columnar file format

#24
post #6
post #4

Thank God this file format is written in Rust, otherwise I'd be extremely skeptical.

It gave me a moment of pause why Rust is part of the equation, but I concluded I'm too dumb

For a while "written in Rust" was sort of a "trust me, bro" label. The hivemind asserted that something written in rust must be automatically good and safe, because rust is good and safe.

Thank god everyone wisened up. The tool maketh not the craftsman. These days the "written in rust" tag is met with knee jerk skepticism, as-if the hive mind over corrected.

Re: Show HN: Vortex – a high-performance columnar file format

#25

“Vortex is a toolkit for working with compressed Apache Arrow arrays in-memory, on-disk, and over-the-wire.” So it’s a toolkit written in Rust. It is not a file format.

Perhaps that verbiage is just confusing. "On-disk" sort of implies "file format" but could be more explicit. That said, the immediate next line in the README perhaps clarifies a bit? "Vortex is designed to be to columnar file formats what Apache DataFusion is to query engines (or, analogously, what LLVM + Clang are to compilers): a highly extensible & extremely fast framework for building a modern columnar file forma…

“Vortex is […] a highly extensible & extremely fast framework for building a modern columnar file format.”

It’s a framework for building file formats. This does not indicate that Vortex is, itself, a file format.

Re: Show HN: Vortex – a high-performance columnar file format

#26

Earlier quoted context omitted.

Perhaps that verbiage is just confusing. "On-disk" sort of implies "file format" but could be more explicit. That said, the immediate next line in the README perhaps clarifies a bit? "Vortex is designed to be to columnar file formats what Apache DataFusion is to query engines (or, analogously, what LLVM + Clang are to compilers): a highly extensible & extremely fast framework for building a modern columnar file forma…

“Vortex is […] a highly extensible & extremely fast framework for building a modern columnar file format.” It’s a framework for building file formats. This does not indicate that Vortex is, itself, a file format.

Will and I actually work on Vortex :wave:

Perhaps we should clean up the wording in the intro, but yes there is in fact a file format!

We actually built the toolkit first, before building the file format. The interesting thing here is that we have a consistent in-memory and on-disk representation of compressed, typed arrays.

This is nice for a couple of reasons:

(a) It makes it really easy to test out new compression algorithms and compute functions. We just implement a new codec and it's automatically available for the file format.

(b) We spend a lot of energy on efficient push down. Many compute functions such as slicing and cloning are zero-cost, and all compute operations can execute directly over compressed data.

Highly encourage you to checkout the vortex-serde crate in the repo for file format things, and the vortex-datafusion crate for some examples of integrating the format into a query engine!

Re: Show HN: Vortex – a high-performance columnar file format

#27

> One of the unique attributes of the (in-progress) Vortex file format is that it encodes the physical layout of the data within the file's footer. This allows the file format to be effectively self-describing and to evolve without breaking changes to the file format specification. That is quite interesting. One challenge in general with parqet and arrow in the otel / observability ecosystem is that the shape of data…

Parquet also encodes the physical layout using footers [1], as does ORC [2]. Perhaps the author meant support for semi-structured data, like the spans you mention.

[1]: https://parquet.apache.org/docs/file-format/

[2]: https://orc.apache.org/specification/ORCv2/#file-tail

Re: Show HN: Vortex – a high-performance columnar file format

#28
post #6
post #4

Thank God this file format is written in Rust, otherwise I'd be extremely skeptical.

It gave me a moment of pause why Rust is part of the equation, but I concluded I'm too dumb

Buried under the memes/vibes there is an actual reason this is important for data tools.

The previous generation of analytics/"Big Data" projects (think Hadoop, Spark, Kafka, Elastic) were all built in the JVM. They were monolithic distributed systems clusters hosted on VMs or on-premise. They were servers with clients implemented in Java. It is effectively impossible to embed a Java library into anything non-Java, the best you can do is fork a JVM with a carefully maintained classpath and hit it over the network (c.f. PySpark). Kafka has externally maintained bindings that lag the official JVM client.

Parquet was built during this era, so naturally its reference implementation was written in Java. For many years, the only implementation of Parquet was in Java. Even when parquet-cpp and subsequent implementations began to pop up, the Parquet Java implementation was still the best maintained. Over time as the spec got updated and new features made their way into Parquet, different implementations had different support. Files written by parquet-cpp or parquet-rs could not be opened via Spark or Presto.

The newer generation of data analytics tooling is meant to be easily embedded, so that generally means a native language that can export shared objects with a C ABI that can be consumed by the FFI layer of different languages. That leaves you a few options, and of those Rust is arguably the best for reasons of tooling and ecosystem, though different projects make different choices. DuckDB for example is an extremely popular library with bindings in several languages and it was built in C++ long after Rust became in-vogue.

While Vortex doesn't (yet) have a C API, we do have Python bindings that we expect to be the main way people use it.

Re: Show HN: Vortex – a high-performance columnar file format

#29
post #18

Earlier quoted context omitted.

Isn't this what the Arrow IPC File format does too? Is there something unique about this?

Compression! Vortex can easily be 10x smaller than the equivalent Arrow representation (and decompresses very quickly into Arrow)

Nice!
Post reply on HN