SlideShare a Scribd company logo
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
2017年11月20日
ヤフー株式会社 クエリエンジンチーム 曾臻
sso@yahoo-corp.jp
Design patterns
in presto
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
Agenda
2
• 自己紹介
• Presto紹介
• Design Patterns in presto
• Template Method
• Visitor
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
自己紹介
名前 : 曾 臻
所属 :ヤフー株式会社 D&Sソリューション
統括本部 クエリエンジン
経歴 :
Presto開発・運用
広告システム開発
SIer
3
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
Agenda
4
• 自己紹介
• Presto紹介
• Design Patterns in presto
• Template Method
• Visitor
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
Presto紹介
• 100% オープンソースの分散式ANSI SQL クエリエン
ジン
• Facebookが公開した
• パフォーマンス&スケーラブル
• Hadoopだけではなく、違うプラットフォームのデー
タもアクセス可能
• Apache licensed, hosted on GitHub
5
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
Agenda
6
• 自己紹介
• Presto紹介
• Design Patterns in presto
• Template Method
• Visitor
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
Design Patterns in presto
PrestoはBuilder、Factory、Iterator、
Singletonなどのパターンを活用してい
る。
今回は主にTemplate Methodと
Visitorパターンを紹介したい。
7
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
Design Patterns in presto
8
Source:[Head First Design Patterns] - O'Reilly Media
オブジェクトの生成に関するパターン
プログラムの構造に関するパターン
オブジェクトの振る舞いに関するパターン
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
Agenda
9
• 自己紹介
• Presto紹介
• Design Patterns in presto
• Template Method
• Visitor
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
Template Methodとは何?
定義:
ある処理のおおまかなアルゴリズムをあ
らかじめ決めておいて、そのアルゴリズ
ムの具体的な設計をサブクラスに任せる
ことである。
10 Source : https://ja.wikipedia.org/wiki/Template_Method_%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
Template Method例1
Template Method パターンの目的は、ある
処理のおおまかなアルゴリズムをあらかじ
め決めておいて、そのアルゴリズムの具体
的な設計をサブクラスに任せることである。
11
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
Template Method例1
12
https://gist.github.com/zz22394/1e5a097253db10f606dbbed8075c00f5
具象クラスは複数個作って良い
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
Template Method in Presto
• Prestoソースコードの中のTemplate Method
パターンを分析してみる。
• AbstractOperatorBenchmark
• AbstractArrayBlock
13
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
Template Method in Presto
14
AbstractOperatorBenchmark
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
Template Method in Presto
15
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
Template Method in Presto
16
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
Template Method in Presto
17
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
Template Method in Presto
18
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
Template Method in Presto
19
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
Template Method in Java
• JavaのTemplate Methodの実例を話す
• HttpServlet
• JUnit
20
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
Template Method in Java
21
http://www.codejava.net/java-ee/servlet/uml-class-diagram-of-httpservlet-api
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
Template Method in Java
22
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
Template Method in Java
23
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
Template Method in Java
24
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
Template Method in Java
25
• Junit
http://junit.sourceforge.net/doc/cookstour/cookstour.htm
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
Template Method in Java
26
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
Template Method のまとめ
27
• 抽象クラスのテンプレートでアルゴリズム
の不変な部分を実装し、具象クラス内で
可変な部分を実装。
• 共通処理は抽象クラスに集約されるので、
ソースコードが再利用される
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
Agenda
28
• 自己紹介
• Presto紹介
• Design Patterns in presto
• Template Method
• Visitor
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
Visitor パターンとは?
29
Visitor パターンは、オブジェクト指向プログラミング およびソフトウェ
ア工学 において、 アルゴリズムをオブジェクトの構造から分離するための
デザインパターンである。分離による実用的な結果として、既存のオブ
ジェクトに対する新たな操作を構造を変更せずに追加することができる。
基本的には Visitor パターンは一群のクラスに対して新たな仮想関数をク
ラス自体を変更せずに追加できるようにする。そのために、全ての仮想関
数を適切に特化させた Visitor クラスを作成する。Visitor はインスタンス
への参照を入力として受け取り、ダブルディスパッチを用いて目的を達す
る。
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
Visitor パターンクラス図
30
https://ja.wikipedia.org/wiki/Visitor_%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
Visitor パターンの例1
31
Visitor:アルゴリズムをオブジェクトの構造か
ら分離する
練習問題:
車Objectがある。車の運転と検査仕組みを
それぞれ書く。
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
Visitor パターンの例1
32
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
Visitor パターンの例1
33
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
Visitor パターンの例1
34
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
Visitor パターンの例1
35
InspectVisitor/DriveVisitorがそれぞれの形で
visitXXXメソッドを実装した
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
Visitor パターンの例1
36
InspectVisitor/DriveVisitorがそれぞれの形で
visitXXXメソッドを実装した
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
Visitor パターンの例1
37
メリット:データ構造と処理が分離された。
ある日「洗車機能を追加したい」
と言われたら、新しいVisitorで簡単に対応できる。
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
Visitor in presto
38
• Visitor パターン例
• Visitor in presto
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
Visitor in presto
39
• Prestoの実行計画生成の流れ
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
Visitor in presto
40
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
Visitor in presto
41
背景:NodeのAST(抽象文法木)はどうやっ
て作られた?
例:あるSQL文
SELECT ROW_NO,START_TIME FROM TBL_01
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
Visitor in presto
42
ANTLR4
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
Visitor in presto
43
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
Visitor in presto
44
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
Visitor in presto
45
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
Visitor in presto
46
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
Visitor in presto
47
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
Visitor in presto
48
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
Visitor in presto
49
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
Visitor パターンのまとめ
50
• 複雑なパターン
• 利用のハードルは比較的に高い
• 向いているユースケース:データオブジェ
クト構成が大きく変わらない、且つデータ
オブジェクトに対しての操作がよく変わる
(あるいは複数パターンの操作がある)
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
EOP
Ad

Recommended

Dataworks Summit 2017 SanJose StreamProcessing - Hadoop Source Code Reading #...
Dataworks Summit 2017 SanJose StreamProcessing - Hadoop Source Code Reading #...
Yahoo!デベロッパーネットワーク
 
ヤフーのロギングSDKの挑戦〜データドリブン企業を目指して〜 #yjdsnight
ヤフーのロギングSDKの挑戦〜データドリブン企業を目指して〜 #yjdsnight
Yahoo!デベロッパーネットワーク
 
実運用して分かったRabbit MQの良いところ・気をつけること #jjug
実運用して分かったRabbit MQの良いところ・気をつけること #jjug
Yahoo!デベロッパーネットワーク
 
Dragon: A Distributed Object Storage at Yahoo! JAPAN (WebDB Forum 2017)
Dragon: A Distributed Object Storage at Yahoo! JAPAN (WebDB Forum 2017)
Yahoo!デベロッパーネットワーク
 
プランニングツールにおけるインタラクティブな可視化を支えるバックエンド
プランニングツールにおけるインタラクティブな可視化を支えるバックエンド
Yahoo!デベロッパーネットワーク
 
Yahoo! JAPANのサービス開発を10倍早くした社内PaaS構築の今とこれから
Yahoo! JAPANのサービス開発を10倍早くした社内PaaS構築の今とこれから
Yahoo!デベロッパーネットワーク
 
Yahoo! JAPANのOracle構成-2017年版
Yahoo! JAPANのOracle構成-2017年版
Yahoo!デベロッパーネットワーク
 
Dataworks Summit SJ QueryEngine - Hadoop Source Code Reading #23 #hadoopreading
Dataworks Summit SJ QueryEngine - Hadoop Source Code Reading #23 #hadoopreading
Yahoo!デベロッパーネットワーク
 
JavaOne2017参加報告 Microservices topic & approach #jjug
JavaOne2017参加報告 Microservices topic & approach #jjug
Yahoo!デベロッパーネットワーク
 
Yahoo!プロモーション広告のビックデータ基盤を支える技術と今後の展望
Yahoo!プロモーション広告のビックデータ基盤を支える技術と今後の展望
Yahoo!デベロッパーネットワーク
 
Spring Cloud Data Flow の紹介 #streamctjp
Spring Cloud Data Flow の紹介 #streamctjp
Yahoo!デベロッパーネットワーク
 
Apache Big Data Miami 2017 - Hadoop Source Code Reading #23 #hadoopreading
Apache Big Data Miami 2017 - Hadoop Source Code Reading #23 #hadoopreading
Yahoo!デベロッパーネットワーク
 
Storm の新機能について @HSCR #hadoopreading
Storm の新機能について @HSCR #hadoopreading
Yahoo!デベロッパーネットワーク
 
AMPと広告とOpenRTBと #yjmu
AMPと広告とOpenRTBと #yjmu
Yahoo!デベロッパーネットワーク
 
大規模運用で見えるWebプロトコルの理想と現実、そして今後 #html5j #html5j_b
大規模運用で見えるWebプロトコルの理想と現実、そして今後 #html5j #html5j_b
Yahoo!デベロッパーネットワーク
 
Elasticsearch 5.2とJava Clientで戯れる #elasticsearchjp
Elasticsearch 5.2とJava Clientで戯れる #elasticsearchjp
Yahoo!デベロッパーネットワーク
 
Yahoo! JAPANのOSS Cassandra貢献の今までとこれから
Yahoo! JAPANのOSS Cassandra貢献の今までとこれから
Yahoo!デベロッパーネットワーク
 
JSUG 2018/02/05 SpringOnePlatform2017参加報告 プラットフォーム関連のお話
JSUG 2018/02/05 SpringOnePlatform2017参加報告 プラットフォーム関連のお話
Yahoo!デベロッパーネットワーク
 
Automation of Rolling Upgrade of Hadoop Cluster without Data Lost and Job Fai...
Automation of Rolling Upgrade of Hadoop Cluster without Data Lost and Job Fai...
Yahoo!デベロッパーネットワーク
 
Java Clientで入門する Apache Kafka #jjug_ccc #ccc_e2
Java Clientで入門する Apache Kafka #jjug_ccc #ccc_e2
Yahoo!デベロッパーネットワーク
 
データの見える化で進めるデータドリブンカンパニー #devsumiC
データの見える化で進めるデータドリブンカンパニー #devsumiC
Yahoo!デベロッパーネットワーク
 
データテクノロジースペシャル:Yahoo! JAPANにおけるメタデータ管理の試み
データテクノロジースペシャル:Yahoo! JAPANにおけるメタデータ管理の試み
Yahoo!デベロッパーネットワーク
 
絶対にタダでは転ばない広告エンジニア #yjmu
絶対にタダでは転ばない広告エンジニア #yjmu
Yahoo!デベロッパーネットワーク
 
Kafka Summit NYCに見るストリーミングデータETLの話 #streamdatajp
Kafka Summit NYCに見るストリーミングデータETLの話 #streamdatajp
Yahoo!デベロッパーネットワーク
 
ICML2017 参加報告会 山本康生
ICML2017 参加報告会 山本康生
Yahoo!デベロッパーネットワーク
 
SpringBootTest入門
SpringBootTest入門
Yahoo!デベロッパーネットワーク
 

More Related Content

What's hot (20)

Yahoo! JAPANのOracle構成-2017年版
Yahoo! JAPANのOracle構成-2017年版
Yahoo!デベロッパーネットワーク
 
Dataworks Summit SJ QueryEngine - Hadoop Source Code Reading #23 #hadoopreading
Dataworks Summit SJ QueryEngine - Hadoop Source Code Reading #23 #hadoopreading
Yahoo!デベロッパーネットワーク
 
JavaOne2017参加報告 Microservices topic & approach #jjug
JavaOne2017参加報告 Microservices topic & approach #jjug
Yahoo!デベロッパーネットワーク
 
Yahoo!プロモーション広告のビックデータ基盤を支える技術と今後の展望
Yahoo!プロモーション広告のビックデータ基盤を支える技術と今後の展望
Yahoo!デベロッパーネットワーク
 
Spring Cloud Data Flow の紹介 #streamctjp
Spring Cloud Data Flow の紹介 #streamctjp
Yahoo!デベロッパーネットワーク
 
Apache Big Data Miami 2017 - Hadoop Source Code Reading #23 #hadoopreading
Apache Big Data Miami 2017 - Hadoop Source Code Reading #23 #hadoopreading
Yahoo!デベロッパーネットワーク
 
Storm の新機能について @HSCR #hadoopreading
Storm の新機能について @HSCR #hadoopreading
Yahoo!デベロッパーネットワーク
 
AMPと広告とOpenRTBと #yjmu
AMPと広告とOpenRTBと #yjmu
Yahoo!デベロッパーネットワーク
 
大規模運用で見えるWebプロトコルの理想と現実、そして今後 #html5j #html5j_b
大規模運用で見えるWebプロトコルの理想と現実、そして今後 #html5j #html5j_b
Yahoo!デベロッパーネットワーク
 
Elasticsearch 5.2とJava Clientで戯れる #elasticsearchjp
Elasticsearch 5.2とJava Clientで戯れる #elasticsearchjp
Yahoo!デベロッパーネットワーク
 
Yahoo! JAPANのOSS Cassandra貢献の今までとこれから
Yahoo! JAPANのOSS Cassandra貢献の今までとこれから
Yahoo!デベロッパーネットワーク
 
JSUG 2018/02/05 SpringOnePlatform2017参加報告 プラットフォーム関連のお話
JSUG 2018/02/05 SpringOnePlatform2017参加報告 プラットフォーム関連のお話
Yahoo!デベロッパーネットワーク
 
Automation of Rolling Upgrade of Hadoop Cluster without Data Lost and Job Fai...
Automation of Rolling Upgrade of Hadoop Cluster without Data Lost and Job Fai...
Yahoo!デベロッパーネットワーク
 
Java Clientで入門する Apache Kafka #jjug_ccc #ccc_e2
Java Clientで入門する Apache Kafka #jjug_ccc #ccc_e2
Yahoo!デベロッパーネットワーク
 
データの見える化で進めるデータドリブンカンパニー #devsumiC
データの見える化で進めるデータドリブンカンパニー #devsumiC
Yahoo!デベロッパーネットワーク
 
データテクノロジースペシャル:Yahoo! JAPANにおけるメタデータ管理の試み
データテクノロジースペシャル:Yahoo! JAPANにおけるメタデータ管理の試み
Yahoo!デベロッパーネットワーク
 
絶対にタダでは転ばない広告エンジニア #yjmu
絶対にタダでは転ばない広告エンジニア #yjmu
Yahoo!デベロッパーネットワーク
 
Kafka Summit NYCに見るストリーミングデータETLの話 #streamdatajp
Kafka Summit NYCに見るストリーミングデータETLの話 #streamdatajp
Yahoo!デベロッパーネットワーク
 
Dataworks Summit SJ QueryEngine - Hadoop Source Code Reading #23 #hadoopreading
Dataworks Summit SJ QueryEngine - Hadoop Source Code Reading #23 #hadoopreading
Yahoo!デベロッパーネットワーク
 
Yahoo!プロモーション広告のビックデータ基盤を支える技術と今後の展望
Yahoo!プロモーション広告のビックデータ基盤を支える技術と今後の展望
Yahoo!デベロッパーネットワーク
 
大規模運用で見えるWebプロトコルの理想と現実、そして今後 #html5j #html5j_b
大規模運用で見えるWebプロトコルの理想と現実、そして今後 #html5j #html5j_b
Yahoo!デベロッパーネットワーク
 
JSUG 2018/02/05 SpringOnePlatform2017参加報告 プラットフォーム関連のお話
JSUG 2018/02/05 SpringOnePlatform2017参加報告 プラットフォーム関連のお話
Yahoo!デベロッパーネットワーク
 
Automation of Rolling Upgrade of Hadoop Cluster without Data Lost and Job Fai...
Automation of Rolling Upgrade of Hadoop Cluster without Data Lost and Job Fai...
Yahoo!デベロッパーネットワーク
 
データの見える化で進めるデータドリブンカンパニー #devsumiC
データの見える化で進めるデータドリブンカンパニー #devsumiC
Yahoo!デベロッパーネットワーク
 
データテクノロジースペシャル:Yahoo! JAPANにおけるメタデータ管理の試み
データテクノロジースペシャル:Yahoo! JAPANにおけるメタデータ管理の試み
Yahoo!デベロッパーネットワーク
 
Kafka Summit NYCに見るストリーミングデータETLの話 #streamdatajp
Kafka Summit NYCに見るストリーミングデータETLの話 #streamdatajp
Yahoo!デベロッパーネットワーク
 

Viewers also liked (10)

ICML2017 参加報告会 山本康生
ICML2017 参加報告会 山本康生
Yahoo!デベロッパーネットワーク
 
SpringBootTest入門
SpringBootTest入門
Yahoo!デベロッパーネットワーク
 
ニュースアプリで起きた不具合から学んだ 最適への一歩
ニュースアプリで起きた不具合から学んだ 最適への一歩
Yahoo!デベロッパーネットワーク
 
グロースハック なぜ我々は無意味な施策を打ってしまうのか
グロースハック なぜ我々は無意味な施策を打ってしまうのか
Yahoo!デベロッパーネットワーク
 
Dragon: A Distributed Object Storage at Yahoo! JAPAN (WebDB Forum 2017 / E...
Dragon: A Distributed Object Storage at Yahoo! JAPAN (WebDB Forum 2017 / E...
Yahoo!デベロッパーネットワーク
 
第4回 NIPS+読み会・関西 発表資料 山本
第4回 NIPS+読み会・関西 発表資料 山本
Yahoo!デベロッパーネットワーク
 
Cassandra: Now and the Future @ Yahoo! JAPAN
Cassandra: Now and the Future @ Yahoo! JAPAN
Yahoo!デベロッパーネットワーク
 
Dockerで始める Java EE アプリケーション開発 for JJUG CCC 2017
Dockerで始める Java EE アプリケーション開発 for JJUG CCC 2017
Kohei Saito
 
AI and Machine Learning Demystified by Carol Smith at Midwest UX 2017
AI and Machine Learning Demystified by Carol Smith at Midwest UX 2017
Carol Smith
 
グロースハック なぜ我々は無意味な施策を打ってしまうのか
グロースハック なぜ我々は無意味な施策を打ってしまうのか
Yahoo!デベロッパーネットワーク
 
Dragon: A Distributed Object Storage at Yahoo! JAPAN (WebDB Forum 2017 / E...
Dragon: A Distributed Object Storage at Yahoo! JAPAN (WebDB Forum 2017 / E...
Yahoo!デベロッパーネットワーク
 
Dockerで始める Java EE アプリケーション開発 for JJUG CCC 2017
Dockerで始める Java EE アプリケーション開発 for JJUG CCC 2017
Kohei Saito
 
AI and Machine Learning Demystified by Carol Smith at Midwest UX 2017
AI and Machine Learning Demystified by Carol Smith at Midwest UX 2017
Carol Smith
 
Ad

Similar to Design pattern in presto source code (20)

決済金融から始めるデータドリブンカンパニー #yjmu
決済金融から始めるデータドリブンカンパニー #yjmu
Yahoo!デベロッパーネットワーク
 
決済金融から始めるデータドリブンカンパニー
決済金融から始めるデータドリブンカンパニー
Tokuhiro Eto
 
Yahoo! JAPANのコンテンツプラットフォームを支えるSpring Cloud Streamによるマイクロサービスアーキテクチャ #jsug #sf_52
Yahoo! JAPANのコンテンツプラットフォームを支えるSpring Cloud Streamによるマイクロサービスアーキテクチャ #jsug #sf_52
Yahoo!デベロッパーネットワーク
 
ヤフオク!の快適なカスタマー体験を支えるモバイルアプリのライブアップデート技術
ヤフオク!の快適なカスタマー体験を支えるモバイルアプリのライブアップデート技術
Yahoo!デベロッパーネットワーク
 
最若手メンバーこそチャンス!チーム改善に取り組んでわかったこと
最若手メンバーこそチャンス!チーム改善に取り組んでわかったこと
Masayuki Ueda
 
大規模インフラで考える インフラチームの未来
大規模インフラで考える インフラチームの未来
Masayuki Ueda
 
Yahoo! JAPAN MeetUp #8 (インフラ技術カンファレンス)セッション①
Yahoo! JAPAN MeetUp #8 (インフラ技術カンファレンス)セッション①
Yahoo!デベロッパーネットワーク
 
Spring Boot on Kubernetes : Yahoo!ズバトク事例 #jjug_ccc
Spring Boot on Kubernetes : Yahoo!ズバトク事例 #jjug_ccc
Yahoo!デベロッパーネットワーク
 
YJTC18 A-1 大規模サーバの戦略
YJTC18 A-1 大規模サーバの戦略
Yahoo!デベロッパーネットワーク
 
Datadog monitoring with HashiCorp
Datadog monitoring with HashiCorp
Masatomo Ito
 
ヤフーの広告レポートシステムをSpring Cloud Stream化するまで #jjug_ccc #ccc_a4
ヤフーの広告レポートシステムをSpring Cloud Stream化するまで #jjug_ccc #ccc_a4
Yahoo!デベロッパーネットワーク
 
アイデアを形にする ③3時間でアプリ公開!ゼロからのプログラミング講座
アイデアを形にする ③3時間でアプリ公開!ゼロからのプログラミング講座
DIVE INTO CODE Corp.
 
Ahead-of-Time Compilation with JDK 9 [Java Day Tokyo 2017 D1-A1]
Ahead-of-Time Compilation with JDK 9 [Java Day Tokyo 2017 D1-A1]
David Buck
 
20170626 さくらインターネット Stripe Magento
20170626 さくらインターネット Stripe Magento
Hirokazu Nishi
 
Datadog monitoring with HashiCorp stack
Datadog monitoring with HashiCorp stack
Masatomo Ito
 
技術選択とアーキテクトの役割
技術選択とアーキテクトの役割
Toru Yamaguchi
 
私たち企業がアクセシビリティに取り組む理由(2018年) #accfes
私たち企業がアクセシビリティに取り組む理由(2018年) #accfes
Yahoo!デベロッパーネットワーク
 
決済金融から始めるデータドリブンカンパニー
決済金融から始めるデータドリブンカンパニー
Tokuhiro Eto
 
Yahoo! JAPANのコンテンツプラットフォームを支えるSpring Cloud Streamによるマイクロサービスアーキテクチャ #jsug #sf_52
Yahoo! JAPANのコンテンツプラットフォームを支えるSpring Cloud Streamによるマイクロサービスアーキテクチャ #jsug #sf_52
Yahoo!デベロッパーネットワーク
 
ヤフオク!の快適なカスタマー体験を支えるモバイルアプリのライブアップデート技術
ヤフオク!の快適なカスタマー体験を支えるモバイルアプリのライブアップデート技術
Yahoo!デベロッパーネットワーク
 
最若手メンバーこそチャンス!チーム改善に取り組んでわかったこと
最若手メンバーこそチャンス!チーム改善に取り組んでわかったこと
Masayuki Ueda
 
大規模インフラで考える インフラチームの未来
大規模インフラで考える インフラチームの未来
Masayuki Ueda
 
Yahoo! JAPAN MeetUp #8 (インフラ技術カンファレンス)セッション①
Yahoo! JAPAN MeetUp #8 (インフラ技術カンファレンス)セッション①
Yahoo!デベロッパーネットワーク
 
Datadog monitoring with HashiCorp
Datadog monitoring with HashiCorp
Masatomo Ito
 
ヤフーの広告レポートシステムをSpring Cloud Stream化するまで #jjug_ccc #ccc_a4
ヤフーの広告レポートシステムをSpring Cloud Stream化するまで #jjug_ccc #ccc_a4
Yahoo!デベロッパーネットワーク
 
アイデアを形にする ③3時間でアプリ公開!ゼロからのプログラミング講座
アイデアを形にする ③3時間でアプリ公開!ゼロからのプログラミング講座
DIVE INTO CODE Corp.
 
Ahead-of-Time Compilation with JDK 9 [Java Day Tokyo 2017 D1-A1]
Ahead-of-Time Compilation with JDK 9 [Java Day Tokyo 2017 D1-A1]
David Buck
 
20170626 さくらインターネット Stripe Magento
20170626 さくらインターネット Stripe Magento
Hirokazu Nishi
 
Datadog monitoring with HashiCorp stack
Datadog monitoring with HashiCorp stack
Masatomo Ito
 
技術選択とアーキテクトの役割
技術選択とアーキテクトの役割
Toru Yamaguchi
 
私たち企業がアクセシビリティに取り組む理由(2018年) #accfes
私たち企業がアクセシビリティに取り組む理由(2018年) #accfes
Yahoo!デベロッパーネットワーク
 
Ad

More from Yahoo!デベロッパーネットワーク (20)

ゼロから始める転移学習
ゼロから始める転移学習
Yahoo!デベロッパーネットワーク
 
継続的なモデルモニタリングを実現するKubernetes Operator
継続的なモデルモニタリングを実現するKubernetes Operator
Yahoo!デベロッパーネットワーク
 
ヤフーでは開発迅速性と品質のバランスをどう取ってるか
ヤフーでは開発迅速性と品質のバランスをどう取ってるか
Yahoo!デベロッパーネットワーク
 
オンプレML基盤on Kubernetes パネルディスカッション
オンプレML基盤on Kubernetes パネルディスカッション
Yahoo!デベロッパーネットワーク
 
LakeTahoe
LakeTahoe
Yahoo!デベロッパーネットワーク
 
オンプレML基盤on Kubernetes 〜Yahoo! JAPAN AIPF〜
オンプレML基盤on Kubernetes 〜Yahoo! JAPAN AIPF〜
Yahoo!デベロッパーネットワーク
 
Persistent-memory-native Database High-availability Feature
Persistent-memory-native Database High-availability Feature
Yahoo!デベロッパーネットワーク
 
データの価値を最大化させるためのデザイン~データビジュアライゼーションの方法~ #devsumi 17-E-2
データの価値を最大化させるためのデザイン~データビジュアライゼーションの方法~ #devsumi 17-E-2
Yahoo!デベロッパーネットワーク
 
eコマースと実店舗の相互利益を目指したデザイン #yjtc
eコマースと実店舗の相互利益を目指したデザイン #yjtc
Yahoo!デベロッパーネットワーク
 
ヤフーを支えるセキュリティ ~サイバー攻撃を防ぐエンジニアの仕事とは~ #yjtc
ヤフーを支えるセキュリティ ~サイバー攻撃を防ぐエンジニアの仕事とは~ #yjtc
Yahoo!デベロッパーネットワーク
 
Yahoo! JAPANのIaaSを支えるKubernetesクラスタ、アップデート自動化への挑戦 #yjtc
Yahoo! JAPANのIaaSを支えるKubernetesクラスタ、アップデート自動化への挑戦 #yjtc
Yahoo!デベロッパーネットワーク
 
ビッグデータから人々のムードを捉える #yjtc
ビッグデータから人々のムードを捉える #yjtc
Yahoo!デベロッパーネットワーク
 
サイエンス領域におけるMLOpsの取り組み #yjtc
サイエンス領域におけるMLOpsの取り組み #yjtc
Yahoo!デベロッパーネットワーク
 
ヤフーのAIプラットフォーム紹介 ~AIテックカンパニーを支えるデータ基盤~ #yjtc
ヤフーのAIプラットフォーム紹介 ~AIテックカンパニーを支えるデータ基盤~ #yjtc
Yahoo!デベロッパーネットワーク
 
Yahoo! JAPAN Tech Conference 2022 Day2 Keynote #yjtc
Yahoo! JAPAN Tech Conference 2022 Day2 Keynote #yjtc
Yahoo!デベロッパーネットワーク
 
新技術を使った次世代の商品の見せ方 ~ヤフオク!のマルチビュー機能~ #yjtc
新技術を使った次世代の商品の見せ方 ~ヤフオク!のマルチビュー機能~ #yjtc
Yahoo!デベロッパーネットワーク
 
PC版Yahoo!メールリニューアル ~サービスのUI/UX統合と改善プロセス~ #yjtc
PC版Yahoo!メールリニューアル ~サービスのUI/UX統合と改善プロセス~ #yjtc
Yahoo!デベロッパーネットワーク
 
モブデザインによる多職種チームのコミュニケーション改善 #yjtc
モブデザインによる多職種チームのコミュニケーション改善 #yjtc
Yahoo!デベロッパーネットワーク
 
「新しいおうち探し」のためのAIアシスト検索 #yjtc
「新しいおうち探し」のためのAIアシスト検索 #yjtc
Yahoo!デベロッパーネットワーク
 
ユーザーの地域を考慮した検索入力補助機能の改善の試み #yjtc
ユーザーの地域を考慮した検索入力補助機能の改善の試み #yjtc
Yahoo!デベロッパーネットワーク
 
ヤフーでは開発迅速性と品質のバランスをどう取ってるか
ヤフーでは開発迅速性と品質のバランスをどう取ってるか
Yahoo!デベロッパーネットワーク
 
データの価値を最大化させるためのデザイン~データビジュアライゼーションの方法~ #devsumi 17-E-2
データの価値を最大化させるためのデザイン~データビジュアライゼーションの方法~ #devsumi 17-E-2
Yahoo!デベロッパーネットワーク
 
ヤフーを支えるセキュリティ ~サイバー攻撃を防ぐエンジニアの仕事とは~ #yjtc
ヤフーを支えるセキュリティ ~サイバー攻撃を防ぐエンジニアの仕事とは~ #yjtc
Yahoo!デベロッパーネットワーク
 
Yahoo! JAPANのIaaSを支えるKubernetesクラスタ、アップデート自動化への挑戦 #yjtc
Yahoo! JAPANのIaaSを支えるKubernetesクラスタ、アップデート自動化への挑戦 #yjtc
Yahoo!デベロッパーネットワーク
 
ヤフーのAIプラットフォーム紹介 ~AIテックカンパニーを支えるデータ基盤~ #yjtc
ヤフーのAIプラットフォーム紹介 ~AIテックカンパニーを支えるデータ基盤~ #yjtc
Yahoo!デベロッパーネットワーク
 
新技術を使った次世代の商品の見せ方 ~ヤフオク!のマルチビュー機能~ #yjtc
新技術を使った次世代の商品の見せ方 ~ヤフオク!のマルチビュー機能~ #yjtc
Yahoo!デベロッパーネットワーク
 
PC版Yahoo!メールリニューアル ~サービスのUI/UX統合と改善プロセス~ #yjtc
PC版Yahoo!メールリニューアル ~サービスのUI/UX統合と改善プロセス~ #yjtc
Yahoo!デベロッパーネットワーク
 
モブデザインによる多職種チームのコミュニケーション改善 #yjtc
モブデザインによる多職種チームのコミュニケーション改善 #yjtc
Yahoo!デベロッパーネットワーク
 
ユーザーの地域を考慮した検索入力補助機能の改善の試み #yjtc
ユーザーの地域を考慮した検索入力補助機能の改善の試み #yjtc
Yahoo!デベロッパーネットワーク
 

Design pattern in presto source code

  • 1. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 2017年11月20日 ヤフー株式会社 クエリエンジンチーム 曾臻 [email protected] Design patterns in presto
  • 2. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. Agenda 2 • 自己紹介 • Presto紹介 • Design Patterns in presto • Template Method • Visitor
  • 3. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 自己紹介 名前 : 曾 臻 所属 :ヤフー株式会社 D&Sソリューション 統括本部 クエリエンジン 経歴 : Presto開発・運用 広告システム開発 SIer 3
  • 4. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. Agenda 4 • 自己紹介 • Presto紹介 • Design Patterns in presto • Template Method • Visitor
  • 5. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. Presto紹介 • 100% オープンソースの分散式ANSI SQL クエリエン ジン • Facebookが公開した • パフォーマンス&スケーラブル • Hadoopだけではなく、違うプラットフォームのデー タもアクセス可能 • Apache licensed, hosted on GitHub 5
  • 6. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. Agenda 6 • 自己紹介 • Presto紹介 • Design Patterns in presto • Template Method • Visitor
  • 7. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. Design Patterns in presto PrestoはBuilder、Factory、Iterator、 Singletonなどのパターンを活用してい る。 今回は主にTemplate Methodと Visitorパターンを紹介したい。 7
  • 8. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. Design Patterns in presto 8 Source:[Head First Design Patterns] - O'Reilly Media オブジェクトの生成に関するパターン プログラムの構造に関するパターン オブジェクトの振る舞いに関するパターン
  • 9. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. Agenda 9 • 自己紹介 • Presto紹介 • Design Patterns in presto • Template Method • Visitor
  • 10. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. Template Methodとは何? 定義: ある処理のおおまかなアルゴリズムをあ らかじめ決めておいて、そのアルゴリズ ムの具体的な設計をサブクラスに任せる ことである。 10 Source : https://ja.wikipedia.org/wiki/Template_Method_%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3
  • 11. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. Template Method例1 Template Method パターンの目的は、ある 処理のおおまかなアルゴリズムをあらかじ め決めておいて、そのアルゴリズムの具体 的な設計をサブクラスに任せることである。 11
  • 12. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. Template Method例1 12 https://gist.github.com/zz22394/1e5a097253db10f606dbbed8075c00f5 具象クラスは複数個作って良い
  • 13. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. Template Method in Presto • Prestoソースコードの中のTemplate Method パターンを分析してみる。 • AbstractOperatorBenchmark • AbstractArrayBlock 13
  • 14. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. Template Method in Presto 14 AbstractOperatorBenchmark
  • 15. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. Template Method in Presto 15
  • 16. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. Template Method in Presto 16
  • 17. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. Template Method in Presto 17
  • 18. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. Template Method in Presto 18
  • 19. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. Template Method in Presto 19
  • 20. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. Template Method in Java • JavaのTemplate Methodの実例を話す • HttpServlet • JUnit 20
  • 21. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. Template Method in Java 21 http://www.codejava.net/java-ee/servlet/uml-class-diagram-of-httpservlet-api
  • 22. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. Template Method in Java 22
  • 23. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. Template Method in Java 23
  • 24. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. Template Method in Java 24
  • 25. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. Template Method in Java 25 • Junit http://junit.sourceforge.net/doc/cookstour/cookstour.htm
  • 26. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. Template Method in Java 26
  • 27. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. Template Method のまとめ 27 • 抽象クラスのテンプレートでアルゴリズム の不変な部分を実装し、具象クラス内で 可変な部分を実装。 • 共通処理は抽象クラスに集約されるので、 ソースコードが再利用される
  • 28. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. Agenda 28 • 自己紹介 • Presto紹介 • Design Patterns in presto • Template Method • Visitor
  • 29. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. Visitor パターンとは? 29 Visitor パターンは、オブジェクト指向プログラミング およびソフトウェ ア工学 において、 アルゴリズムをオブジェクトの構造から分離するための デザインパターンである。分離による実用的な結果として、既存のオブ ジェクトに対する新たな操作を構造を変更せずに追加することができる。 基本的には Visitor パターンは一群のクラスに対して新たな仮想関数をク ラス自体を変更せずに追加できるようにする。そのために、全ての仮想関 数を適切に特化させた Visitor クラスを作成する。Visitor はインスタンス への参照を入力として受け取り、ダブルディスパッチを用いて目的を達す る。
  • 30. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. Visitor パターンクラス図 30 https://ja.wikipedia.org/wiki/Visitor_%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3
  • 31. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. Visitor パターンの例1 31 Visitor:アルゴリズムをオブジェクトの構造か ら分離する 練習問題: 車Objectがある。車の運転と検査仕組みを それぞれ書く。
  • 32. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. Visitor パターンの例1 32
  • 33. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. Visitor パターンの例1 33
  • 34. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. Visitor パターンの例1 34
  • 35. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. Visitor パターンの例1 35 InspectVisitor/DriveVisitorがそれぞれの形で visitXXXメソッドを実装した
  • 36. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. Visitor パターンの例1 36 InspectVisitor/DriveVisitorがそれぞれの形で visitXXXメソッドを実装した
  • 37. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. Visitor パターンの例1 37 メリット:データ構造と処理が分離された。 ある日「洗車機能を追加したい」 と言われたら、新しいVisitorで簡単に対応できる。
  • 38. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. Visitor in presto 38 • Visitor パターン例 • Visitor in presto
  • 39. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. Visitor in presto 39 • Prestoの実行計画生成の流れ
  • 40. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. Visitor in presto 40
  • 41. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. Visitor in presto 41 背景:NodeのAST(抽象文法木)はどうやっ て作られた? 例:あるSQL文 SELECT ROW_NO,START_TIME FROM TBL_01
  • 42. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. Visitor in presto 42 ANTLR4
  • 43. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. Visitor in presto 43
  • 44. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. Visitor in presto 44
  • 45. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. Visitor in presto 45
  • 46. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. Visitor in presto 46
  • 47. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. Visitor in presto 47
  • 48. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. Visitor in presto 48
  • 49. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. Visitor in presto 49
  • 50. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. Visitor パターンのまとめ 50 • 複雑なパターン • 利用のハードルは比較的に高い • 向いているユースケース:データオブジェ クト構成が大きく変わらない、且つデータ オブジェクトに対しての操作がよく変わる (あるいは複数パターンの操作がある)
  • 51. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. EOP