Firstly, their core parsing routine is a state machine not unlike the one found in rust-csv: https://github.com/wiseio/paratext/blob/master/src/csv/rowba...
Secondly, they do indeed appear to be achieving high parsing speed using coarsely grained parallelism. You can see the code that chunks up the CSV data here: https://github.com/wiseio/paratext/blob/master/src/generic/c...
It's pretty clever!
> I wonder what processor this is running on and what their storage system this is.. multiple PCIe SSD?
Consumer grade NVMe disks currently achiveve 2GB/s. It is easy to use a couple of those, or just one professional SSD.
I don't think so, the difference is you're expecting it to read one row at a time and it's actually reading one column at a time. load_csv_as_iterator is iterating over the columns.
One high-end PCIe SSD can manage that; two easily could. A high-end NAS might, too.
"A fast reader exploits the capabilities of the storage system"...
the graphs show that their storage system is doing 4.00 GB/sec
I wonder what processor this is running on and what their storage system this is.. multiple PCIe SSD?
I tried running a quick test but only succeeded in OOMing my 8G laptop.
Even just doing
Starts eating up all my ram after about a minute of spinning the cpu... so I think they have a slightly different definition of an iterator as everyone else.Compared to
which runs in a few seconds, or a slightly more domain specific and optimized version of 'cut'[1] that runs even faster (300-500MB/s on a single core depending on which fields you want) I also wonder if that is 2.5 GB/s per core.https://github.com/BurntSushi/rust-csv does 241 MB/s in raw mode, so I find it a little hard to believe that this is 10x faster... unless that is while maxing out multiple cores.
[1] https://github.com/bro/bro-aux/blob/master/bro-cut/bro-cut.c