Prestoソースコードリーディング

7
Sadayuki Furuhashi @frsyuki

お、PrestoってJDBCドライバがあるのか。 https://t.co/VYQEhmAAZf

2013-11-15 20:21:02
Sadayuki Furuhashi @frsyuki

ところどころに airlift.io が仕込まれている

2013-11-15 20:34:31
Sadayuki Furuhashi @frsyuki

これはおもしろいな。イカス。lightweight dependency injection framework for Java https://t.co/k8YWaGzO6U

2013-11-15 20:40:45
Sadayuki Furuhashi @frsyuki

// 微妙な時間に目が覚めてしまったのでprestoのコード読んでる

2013-11-15 20:52:08
Sadayuki Furuhashi @frsyuki

JDBI is a SQL convenience library for Java. It attempts to expose relational database access in idiomatic in Java http://t.co/PZl2AjCgwW

2013-11-15 20:54:08
Sadayuki Furuhashi @frsyuki

JDBIは便利そうだけど見た目が黒魔術になるな。Handle.createQuery だけが欲しいけど、それにしては牛刀感がある。最近自作しちゃったし…

2013-11-15 20:58:48
Sadayuki Furuhashi @frsyuki

Hiveよりずっとよみやすい

2013-11-15 21:02:56
Sadayuki Furuhashi @frsyuki

Prestoが使っているJDBIではcreate tableまでJDBIでやっているけど、そこは某Plazmaの実装で使ったActiveRecordを組み合わせる方がイケていると思った。これスキーマのmigrationが必要になったらどうするんだろうな。

2013-11-15 21:05:36
Sadayuki Furuhashi @frsyuki

Javaのコードに突然ActiveRecordのmigration scriptが混ざるのがキモいのは認める。

2013-11-15 21:06:04
Sadayuki Furuhashi @frsyuki

実行計画のモデルを発見。PlanNodeRewriterはオプティマイザのプラグインを想定しているのかな。 https://t.co/UWqYgUXCdN

2013-11-15 21:09:39
Sadayuki Furuhashi @frsyuki

その通りだった。オプティマイザはPlanNodeRewriterを実装する。これならpush downの実装は簡単そう。 https://t.co/EqJ0JieRF5

2013-11-15 21:10:59
Sadayuki Furuhashi @frsyuki

コレだいぶがんばったな…最初は何でoptiqとか既存のSQLの実装を使わないのかと思ったけども、ここまで自前で実装したなら逆に良い気がした。

2013-11-15 21:13:18
Sadayuki Furuhashi @frsyuki

かの@muga_nishizawaさんが好きそうなコードが出てきた。実行プランを受け取ってJavaバイトコードを生成するコードジェネレータを通してから実際に実行するらしい。

2013-11-15 21:14:55
Sadayuki Furuhashi @frsyuki

さすがにJavaバイトコードジェネレータを自前で実装する必要は無かったと思うけど…まぁ作ったのなら良いのでは無かろうか。https://t.co/657piRnW9f

2013-11-15 21:15:54
Sadayuki Furuhashi @frsyuki

たまに出てくるio.airlift.slice.Sliceなるクラスが謎だったので調べてみると、怪しげな物が出てきた。Slice自体はバイト列を表現する。ライブラリ全体はdirect bufferの管理機構であるらしい。 https://t.co/XwCq17zo3I

2013-11-15 21:19:37
Sadayuki Furuhashi @frsyuki

JVM用のoff-heapメモリアロケータを作るのは、誰しも通る道なのかな。

2013-11-15 21:20:26
Sadayuki Furuhashi @frsyuki

ネイティブでサポートしている型システムは、boolean, long, double, Slice=バイト列 の4種類であるらしい。少ない気がするけど、型システムも拡張できるのかな。 https://t.co/IPty6L6afb https://t.co/4jmmXU7rGP

2013-11-15 21:21:44
Sadayuki Furuhashi @frsyuki

そのうち VARCHAR と VARBINARY を分けろ!と言われる未来が見える

2013-11-15 21:22:48
Sadayuki Furuhashi @frsyuki

@oza_x86 Hiveも通ったので、あるのではないかなぁ、と。

2013-11-15 21:23:48
Sadayuki Furuhashi @frsyuki

TypeInfoは普通のenumだから拡張は意図していなさそうだな。そのうち誰かがTimestamp型を入れろと言うに違いない。そしてタイムゾーンが、精度が…となるまではテンプレか。まぁ精度はMySQLやPostgreSQLに従ってマイクロ秒あたりが妥当なのかな。

2013-11-15 21:26:44
Sadayuki Furuhashi @frsyuki

インタフェース的にRecordCursorかTupleReaderを実装すればストレージ層やファイルフォーマットは置き換えられそうだけど、実例が見たいな。RCFileやSequenceFile用の実装を探しているけど見当たらない。

2013-11-15 21:34:56
Sadayuki Furuhashi @frsyuki

TupleReaderやRecordCursorを実装しているクラスが一つも入っていないな…Facebook内部用リポジトリにしか無いと言うことか。しかし裏を返せば外部のjarからプラグイン可能なハズで、それは便利だな。ソースを書き換えなくていい。

2013-11-15 21:37:19
Sadayuki Furuhashi @frsyuki

ぃゃそんなハズは無い気がするな。そしたら今のコードベースでは単品でデータを読めないことになり、誰も試せない状態でOSS化したとは考えにくいな。もうちょっと探してみる

2013-11-15 21:40:26
Sadayuki Furuhashi @frsyuki

やっぱり見つからない。一時テーブル用に内部で使われているBlockCursorはあるけども、他には何もない。Presto-HiveのテストためのCREATE TABLE文を発見したけども、STORED AS RCFILEとある。一方でRCFileから実際に読み出すテストはない。

2013-11-15 21:55:06