Citation

@inproceedings{10.1145/3183713.3196893,
author = {Tahboub, Ruby Y. and Essertel, Gr\'{e}gory M. and Rompf, Tiark},
title = {How to Architect a Query Compiler, Revisited},
year = {2018},
isbn = {9781450347037},
publisher = {Association for Computing Machinery},
address = {New York, NY, USA},
url = {https://doi.org/10.1145/3183713.3196893},
doi = {10.1145/3183713.3196893},
booktitle = {Proceedings of the 2018 International Conference on Management of Data},
pages = {307–322},
numpages = {16},
keywords = {query compilation, futamura projections},
location = {Houston, TX, USA},
series = {SIGMOD ’18}
}

どんなもの?

SQL コンパイラはどう作るのがいいの? → 二村射影の考え方をベースとしたメタプログラミングで作るといいよ

ということで、 LB2 というデータベースを作って、評価してみました。

先行研究と比べてどこがすごい?

  • 先行研究として比較に挙げられていたもの: マルチパス
    • SQL → 実行計画 → 中間表現その1 → 中間表現その2 → … → コンパイル
  • この論文: シングルパス
    • SQL → 実行計画 → コンパイル

マルチパスによって、実行計画に対する最適化がいろいろ行えるぞ!という主張があったが、シングルパスでも十分に最適化できるし、並列化においてはコーナーケースの検証が要らなくなるのでめっちゃ楽になる。

技術や手法のキモはどこ?

高級言語(ここでは Scala)で実装した、実行計画のインタプリタっぽいコードを使って、コンパイラを実装した。だから、インタプリタとコンパイラで複数の実装をメンテする必要がない。

(インタプリタっぽいコードを書くとコンパイラになる仕組みは、 LMS というライブラリで実現)

どうやって有効だと検証した?

先行研究として比較対象に挙げた DBLAB と HyPer と TPC-H ベンチマークで比較。 DBLAB は GLib のデータ構造に足を引っ張られたとかごたごた書いてあるけど、全体的にはちょっと速いか遜色ないくらい。

議論はある?

逆にどういうときにマルチパスのような構成にするべきなのか?という題の議論があり、 SQL とほかの言語を組み合わせるときなんかは使えるかもね、と書いてあった。複数の言語をまとめて二村射影のアプローチでがっとコンパイルする方法として最近 GraalVM/Truffle が出てきているので、 SQL とほかの言語のインターフェイスとして Truffle を使うと良いかもしれないと思った。

次に読むべき論文は?

比較対象

二村射影

GraalVM/Truffle