Presto ソースコードリーディング #4
- repeatedly
- 3261
- 0
- 1
- 1
今日の Presto ソースコードリーディングですが、みなさんできるだけ 19:30 ちょうどにご来場ください。いったん 11F ロビーで集合してもらいます。 #prestodb_scr
2014-07-15 17:26:53Presto は今日ですよ! Hadoop Conference 2014 で時間が無くて話せなかったPresto connectorの作り方講座か、workerのスケジューラ周りです。たぶん。 atnd.org/events/53545 #prestodb_scr
2014-07-15 10:52:11開会.直近の変更についてなど共有
#prestodb_scr prestoのリリースプロセスはPresto Verifierでチェックした後にfacebook内でinternal releaseして問題なければアナウンスする。なのでアナウンスされるのを待つのが吉
2014-07-15 19:50:59@useshin さんの物理計画実行の話
XxxResource というクラス群は、HTTPサーバのエンドポイントを宣言している。XxxResourceのメソッド群にはアノテーションが付いていて、GETやPOSTの区別、パスからクエリパラメータへのマッピングが宣言されている。 #prestodb_scr
2014-07-15 19:56:35このあたりのHTTPサーバの実装は、たしかJAX-RSに準拠している。JAX-RSサーバはJettyが提供(Jettyはairlift経由でDI注入される) #prestodb_scr
2014-07-15 19:57:33SqlTaskExecutorやSqlStageExecutorなどのクラスは、スレッドセーフになるよう、できる限り内部にステートを持たないように設計されている。それらのステートはTaskStateMachineに集約されている。 #prestodb_scr
2014-07-15 19:59:07このため、Prestoのクエリ実行系には synchronized 宣言がほとんどなく、コードが見やすい。TaskStateMachineにはsynchronized宣言がたくさん付いているので読むのは大変。大抵読まなくて良いけど。 #prestodb_scr
2014-07-15 19:59:51実行計画はツリーで表現されるけども、logical→distributed→executionへの書き換えとオプティマイザは、普通にVisitorパターンで実装されている。普通が一番。 #prestodb_scr
2014-07-15 20:01:12Prestoの実行計画は、JSONで表現されてノード間で転送される。表現のモデルとしては、シンボルの一覧表だけはリストになっていて、ツリーとは別で保持されている。 #prestodb_scr
2014-07-15 20:02:52そのあたりはEXPLAINを自前で実装したりしない限りは意識する必要は無いけども。 #prestodb_scr
2014-07-15 20:03:39operatorの作成で面白いのは、ORDER BY + LIMIT (TOP N)の最適化まわりかな。aggregation周りも色々やっているけども、その辺りの最適化はまだまだ改善の余地ありで、かなりシンプル。 #prestodb_scr
2014-07-15 20:11:11compilerによって,分かっているところは全部インタプリタとかすっ飛ばして実行できるようにしている.バイトコードにして実行しちゃえば,TypeProfierとかの無駄なコストを省ける #prestodb_scr
2014-07-15 20:11:14visitUnionは順繰りにやらなくても,並列にしても問題なさそう?実装の問題か何か理由があるのか,開発者に聞かないと分からないかも #prestodb_scr
2014-07-15 20:20:26bigint / bigint は、BigintOperators.divide にメソッドがあるし、FunctionRegistryにも登録されているけども、このメソッドは実際には呼ばれない。 #prestodb_scr
2014-07-15 20:20:54ExpressionCompilerとByteCodeExpressionVisitorが、ArithmeticExpressionを評価する時点で、バイトコードを生成して置き換えている。 #prestodb_scr
2014-07-15 20:31:171タスクは1スプリットになるように事前に分解されている.今は1ワーカー1タスク1スプリットになっているが,ここはもう少し賢く1ワーカーで複数タスク走らせても良いのではないか説.でもアグリゲーションの種類によってわける必要がある #prestodb_scr
2014-07-15 20:33:54