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

http://atnd.org/events/53545 frsyuki来日記念に行ったやつのまとめです.
2
tagomoris @tagomoris

今日の Presto ソースコードリーディングですが、みなさんできるだけ 19:30 ちょうどにご来場ください。いったん 11F ロビーで集合してもらいます。 #prestodb_scr

2014-07-15 17:26:53
Sadayuki Furuhashi @frsyuki

Presto は今日ですよ! Hadoop Conference 2014 で時間が無くて話せなかったPresto connectorの作り方講座か、workerのスケジューラ周りです。たぶん。 atnd.org/events/53545 #prestodb_scr

2014-07-15 10:52:11

開会.直近の変更についてなど共有

wyukawa @wyukawa

#prestodb_scr prestoのリリースプロセスはPresto Verifierでチェックした後にfacebook内でinternal releaseして問題なければアナウンスする。なのでアナウンスされるのを待つのが吉

2014-07-15 19:50:59
wyukawa @wyukawa

#prestodb_scr SQLの標準規格に入っているような関数だったらpull requestもすぐmergeされる。

2014-07-15 19:51:52
SKS rep @repeatedly

#prestodb_scr で開会の挨拶っぽいのした

2014-07-15 19:50:40

@useshin さんの物理計画実行の話

リンク GitHub Gists ueshin/20140715_prestoscr4.md 20140715 Presto Source Code Reading #4 - Gist is a simple way to share snippets of text and code with others.
Sadayuki Furuhashi @frsyuki

XxxResource というクラス群は、HTTPサーバのエンドポイントを宣言している。XxxResourceのメソッド群にはアノテーションが付いていて、GETやPOSTの区別、パスからクエリパラメータへのマッピングが宣言されている。 #prestodb_scr

2014-07-15 19:56:35
Sadayuki Furuhashi @frsyuki

このあたりのHTTPサーバの実装は、たしかJAX-RSに準拠している。JAX-RSサーバはJettyが提供(Jettyはairlift経由でDI注入される) #prestodb_scr

2014-07-15 19:57:33
Sadayuki Furuhashi @frsyuki

SqlTaskExecutorやSqlStageExecutorなどのクラスは、スレッドセーフになるよう、できる限り内部にステートを持たないように設計されている。それらのステートはTaskStateMachineに集約されている。 #prestodb_scr

2014-07-15 19:59:07
Sadayuki Furuhashi @frsyuki

このため、Prestoのクエリ実行系には synchronized 宣言がほとんどなく、コードが見やすい。TaskStateMachineにはsynchronized宣言がたくさん付いているので読むのは大変。大抵読まなくて良いけど。 #prestodb_scr

2014-07-15 19:59:51
Sadayuki Furuhashi @frsyuki

実行計画はツリーで表現されるけども、logical→distributed→executionへの書き換えとオプティマイザは、普通にVisitorパターンで実装されている。普通が一番。 #prestodb_scr

2014-07-15 20:01:12
Sadayuki Furuhashi @frsyuki

Prestoの実行計画は、JSONで表現されてノード間で転送される。表現のモデルとしては、シンボルの一覧表だけはリストになっていて、ツリーとは別で保持されている。 #prestodb_scr

2014-07-15 20:02:52
Sadayuki Furuhashi @frsyuki

そのあたりはEXPLAINを自前で実装したりしない限りは意識する必要は無いけども。 #prestodb_scr

2014-07-15 20:03:39
wyukawa @wyukawa

#prestodb_scr コンパイルのやりとりについていけなかったことをここに告白します。

2014-07-15 20:10:57
Sadayuki Furuhashi @frsyuki

operatorの作成で面白いのは、ORDER BY + LIMIT (TOP N)の最適化まわりかな。aggregation周りも色々やっているけども、その辺りの最適化はまだまだ改善の余地ありで、かなりシンプル。 #prestodb_scr

2014-07-15 20:11:11
SKS rep @repeatedly

compilerによって,分かっているところは全部インタプリタとかすっ飛ばして実行できるようにしている.バイトコードにして実行しちゃえば,TypeProfierとかの無駄なコストを省ける #prestodb_scr

2014-07-15 20:11:14
oza @oza_x86

DB レベルの JIT っていうのは,method call の軽量化以上のことはやってるのかなー. #prestodb_scr

2014-07-15 20:18:43
SKS rep @repeatedly

visitUnionは順繰りにやらなくても,並列にしても問題なさそう?実装の問題か何か理由があるのか,開発者に聞かないと分からないかも #prestodb_scr

2014-07-15 20:20:26
Sadayuki Furuhashi @frsyuki

bigint / bigint は、BigintOperators.divide にメソッドがあるし、FunctionRegistryにも登録されているけども、このメソッドは実際には呼ばれない。 #prestodb_scr

2014-07-15 20:20:54
SKS rep @repeatedly

partitionedDriverFactoryのpartitinedとは… #prestodb_scr

2014-07-15 20:23:36
Sadayuki Furuhashi @frsyuki

ExpressionCompilerとByteCodeExpressionVisitorが、ArithmeticExpressionを評価する時点で、バイトコードを生成して置き換えている。 #prestodb_scr

2014-07-15 20:31:17
SKS rep @repeatedly

1タスクは1スプリットになるように事前に分解されている.今は1ワーカー1タスク1スプリットになっているが,ここはもう少し賢く1ワーカーで複数タスク走らせても良いのではないか説.でもアグリゲーションの種類によってわける必要がある #prestodb_scr

2014-07-15 20:33:54