For one, storage bandwidth has increased massively (my laptop's NVMe drives can do 2 x 3.2GB/s reads, you can get quite a few into even small servers). While memory latency and CPU throughput have not increased to the same degree.
To benefit from the increases in CPU throughput, one needs to take advantage of superscalar execution. Which isn't significantly possible with interpreted execution.
> SQLite3 compiles queries into bytecode, while PostgreSQL compiles them into AST-like tree structures
FWIW, expressions are compiled into bytecode in PostgreSQL as well. While there'd plenty benefit of doing that for query trees as well, there are not quite as much raw execution speed reason for it as there is for expressions (as the individual "steps" are much coarser, so the tree walk overhead is proportionally smaller).
It's very different from a OLTP workload where a query will read 10s or 100s of rows via a btree index.
The main thing here is the simplicity of the architecture and combining HyPer, careful mmap usage, and having SQLite engine do all the other non-critical work. So this way this system could be implemented on time by 1 main developer (rockstar dev, Marcelo) and a tiny little help from me.
(Actual author of the idea/architecture here, not mentioned on the paper, but that's life, haha)
But memory isn't. With NVMe the disk-memory-gap has shrunk considerably over previous SSDs and HDD RAIDs.
SQL is mostly "do the same thing a billion times", which aligns very closely with generating code for the inner loop, particularly when the inner loop can be generated without branches.
SQL codegen is basically an industry standard for large-scale sql query processing on top of a large-scale column store. I work one of the few engines at this scale which does not do go query stage codegen & instead uses source codegen vectorized primitives instead of query time (Apache Hive, specifically & the only other one in the same style is Google's supersonic engine).
Apache Impala - SQL to LLVM IR (C++)
https://llvm.org/devmtg/2013-11/slides/Wanderman-Milne-Cloud... [PDF]
Gandiva - SQL to LLVM IR (Java)
https://github.com/dremio/gandiva
MemSQL - SQL to MPL to LLVM IR
http://highscalability.com/blog/2016/9/7/code-generation-the...
Greenplum - SQL to LLVM IR
http://engineering.pivotal.io/post/codegen-gpdb-qx/
Postgres 9.4 Vitesse - SQL to LLVM IR
<https://www.postgresql.org/message-id/CAJNt7%3DZ6w5%2BwyeTKK...
Postgres 11 LLVM - SQL to LLVM IR
https://www.postgresql.org/docs/11/jit-reason.html
SparkSQL - SQL to Java source (Janino + javac)
https://jaceklaskowski.gitbooks.io/mastering-spark-sql/spark...
And as far as I know Redshift's horrible query compilation performance is derived from using C++ codegen which forks gcc inside (not sure why this is so slow though, almost feels like untuned gcc flags or something).
https://docs.aws.amazon.com/redshift/latest/dg/c-query-plann...