Design pattern in presto source code

>100 Views

November 20, 17

スライド概要

JJUG CCC 2017 Fall
http://www.java-users.jp/ccc2017fall/
PrestoはDesign Patternを幅広く使っている、ソースコードは理解しやすいです。
Builder、Factory、Singleton、Iterator、Interpreter、Template Method、VisitorなどのDesign Patternを活用しています。
今回はTemplate Method、Visitorを中心に、この2つDesign Patternの概念・使い方とPrestoソースコードの実例を紹介します。

profile-image

2023年10月からSpeaker Deckに移行しました。最新情報はこちらをご覧ください。 https://speakerdeck.com/lycorptech_jp

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

(ダウンロード不可)

関連スライド

各ページのテキスト
1.

Design patterns in presto 2017年11月20日 ヤフー株式会社 クエリエンジンチーム [email protected] Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved . 曾臻

2.

Agenda • 自己紹介 • Presto紹介 • Design Patterns in presto • Template Method • Visitor 2 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .

3.

自己紹介 名前 : 曾 臻 所属 :ヤフー株式会社 D&Sソリューション 統括本部 クエリエンジン 経歴 : Presto開発・運用 広告システム開発 SIer 3 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .

4.

Agenda • 自己紹介 • Presto紹介 • Design Patterns in presto • Template Method • Visitor 4 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .

5.

Presto紹介 • 100% オープンソースの分散式ANSI SQL クエリエン ジン • Facebookが公開した • パフォーマンス&スケーラブル • Hadoopだけではなく、違うプラットフォームのデー タもアクセス可能 • Apache licensed, hosted on GitHub 5 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .

6.

Agenda • 自己紹介 • Presto紹介 • Design Patterns in presto • Template Method • Visitor 6 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .

7.

Design Patterns in presto PrestoはBuilder、Factory、Iterator、 Singletonなどのパターンを活用してい る。 今回は主にTemplate Methodと Visitorパターンを紹介したい。 7 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .

8.

Design Patterns in presto オブジェクトの生成に関するパターン オブジェクトの振る舞いに関するパターン プログラムの構造に関するパターン Source:[Head First Design Patterns] - O'Reilly Media 8 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .

9.

Agenda • 自己紹介 • Presto紹介 • Design Patterns in presto • Template Method • Visitor 9 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .

10.

Template Methodとは何? 定義: ある処理のおおまかなアルゴリズムをあ らかじめ決めておいて、そのアルゴリズ ムの具体的な設計をサブクラスに任せる ことである。 10 Source : https://ja.wikipedia.org/wiki/Template_Method_%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .

11.

Template Method例1 Template Method パターンの目的は、ある 処理のおおまかなアルゴリズムをあらかじ め決めておいて、そのアルゴリズムの具体 的な設計をサブクラスに任せることである。 11 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .

12.

Template Method例1 具象クラスは複数個作って良い 12 https://gist.github.com/zz22394/1e5a097253db10f606dbbed8075c00f5 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .

13.

Template Method in Presto • Prestoソースコードの中のTemplate Method パターンを分析してみる。 • AbstractOperatorBenchmark • AbstractArrayBlock 13 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .

14.

Template Method in Presto AbstractOperatorBenchmark 14 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .

15.

Template Method in Presto 15 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .

16.

Template Method in Presto 16 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .

17.

Template Method in Presto 17 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .

18.

Template Method in Presto 18 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .

19.

Template Method in Presto 19 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .

20.

Template Method in Java • JavaのTemplate Methodの実例を話す • HttpServlet • JUnit 20 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .

21.

Template Method in Java http://www.codejava.net/java-ee/servlet/uml-class-diagram-of-httpservlet-api 21 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .

22.

Template Method in Java 22 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .

23.

Template Method in Java 23 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .

24.

Template Method in Java 24 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .

25.

Template Method in Java • Junit http://junit.sourceforge.net/doc/cookstour/cookstour.htm 25 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .

26.

Template Method in Java 26 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .

27.

Template Method のまとめ • 抽象クラスのテンプレートでアルゴリズム の不変な部分を実装し、具象クラス内で 可変な部分を実装。 • 共通処理は抽象クラスに集約されるので、 ソースコードが再利用される 27 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .

28.

Agenda • 自己紹介 • Presto紹介 • Design Patterns in presto • Template Method • Visitor 28 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .

29.

Visitor パターンとは? Visitor パターンは、オブジェクト指向プログラミング およびソフトウェ ア工学 において、 アルゴリズムをオブジェクトの構造から分離するための デザインパターンである。分離による実用的な結果として、既存のオブ ジェクトに対する新たな操作を構造を変更せずに追加することができる。 基本的には Visitor パターンは一群のクラスに対して新たな仮想関数をク ラス自体を変更せずに追加できるようにする。そのために、全ての仮想関 数を適切に特化させた Visitor クラスを作成する。Visitor はインスタンス への参照を入力として受け取り、ダブルディスパッチを用いて目的を達す る。 29 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .

30.

Visitor パターンクラス図 https://ja.wikipedia.org/wiki/Visitor_%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3 30 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .

31.

Visitor パターンの例1 Visitor:アルゴリズムをオブジェクトの構造か ら分離する 練習問題: 車Objectがある。車の運転と検査仕組みを それぞれ書く。 31 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .

32.

Visitor パターンの例1 32 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .

33.

Visitor パターンの例1 33 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .

34.

Visitor パターンの例1 34 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .

35.

Visitor パターンの例1 InspectVisitor/DriveVisitorがそれぞれの形で visitXXXメソッドを実装した 35 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .

36.

Visitor パターンの例1 InspectVisitor/DriveVisitorがそれぞれの形で visitXXXメソッドを実装した 36 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .

37.

Visitor パターンの例1 メリット:データ構造と処理が分離された。 ある日「洗車機能を追加したい」 と言われたら、新しいVisitorで簡単に対応できる。 37 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .

38.

Visitor in presto • Visitor パターン例 • Visitor in presto 38 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .

39.

Visitor in presto • Prestoの実行計画生成の流れ 39 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .

40.

Visitor in presto 40 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .

41.

Visitor in presto 背景:NodeのAST(抽象文法木)はどうやっ て作られた? 例:あるSQL文 SELECT ROW_NO,START_TIME FROM TBL_01 41 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .

42.

Visitor in presto ANTLR4 42 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .

43.

Visitor in presto 43 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .

44.

Visitor in presto 44 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .

45.

Visitor in presto 45 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .

46.

Visitor in presto 46 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .

47.

Visitor in presto 47 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .

48.

Visitor in presto 48 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .

49.

Visitor in presto 49 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .

50.

Visitor パターンのまとめ • 複雑なパターン • 利用のハードルは比較的に高い • 向いているユースケース:データオブジェ クト構成が大きく変わらない、且つデータ オブジェクトに対しての操作がよく変わる (あるいは複数パターンの操作がある) 50 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .

51.

EOP Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .