rabbit-slide-kou-postgresql-conference-japan-2023 2023.11.24.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: e429e96e5e854ece58487584d15f14649784ff7b60c3621ba5c6e8495a07edb8
4
+ data.tar.gz: 34dd70d21add731e051a540beb16b82dc9bb2c1036bbb338c80718817c24aed7
5
+ SHA512:
6
+ metadata.gz: 7d2179d1724b3fdfce237aa4a6797c5dd22b429ac4971ae2408d264d2f922ee4b2299f04544ef63cf1d6045814d6d8e104deaa03e4c403333d1f2985982d72ee
7
+ data.tar.gz: 067f0eb55c225d98c014dd9f4af9e5393026172224d7c6136c59541628db8d727bd87c6ead1db42a248db51286d74b6787d895f5e3c10c1968172d2ef73b58c0
data/.rabbit ADDED
@@ -0,0 +1,2 @@
1
+ --size 1920,1080
2
+ apache-arrow-flight-sql-postgresql.rab
data/README.rd ADDED
@@ -0,0 +1,40 @@
1
+ = Apache Arrow Flight SQLでPostgreSQLをもっと速く!
2
+
3
+ PostgreSQLとの接続には独自プロトコルが使われていますが、やりとりするデータが大きくなるとクエリーの処理ではなくこのプロトコルがボトルネックになることが知られています。Apache ArrowFlight SQLプロトコルはこのボトルネックを解消できるプロトコルです。Apache Arrow Flight SQLの詳細、どのくらい速くなるのか、プロトコルを拡張する仕組みのないPostgreSQLでどのように実装したのかといった実装の詳細を紹介します。
4
+
5
+ == ライセンス
6
+
7
+ === スライド
8
+
9
+ CC BY-SA 4.0
10
+
11
+ 原著作者:須藤功平
12
+
13
+ ==== 株式会社クリアコードのロゴ
14
+
15
+ CC BY-SA 4.0
16
+
17
+ 原著作者:株式会社クリアコード
18
+
19
+ ページヘッダーで使っています。
20
+
21
+ == 作者向け
22
+
23
+ === 表示
24
+
25
+ rake
26
+
27
+ === 公開
28
+
29
+ rake publish
30
+
31
+ == 閲覧者向け
32
+
33
+ === インストール
34
+
35
+ gem install rabbit-slide-kou-postgresql-conference-japan-2023
36
+
37
+ === 表示
38
+
39
+ rabbit rabbit-slide-kou-postgresql-conference-japan-2023.gem
40
+
data/Rakefile ADDED
@@ -0,0 +1,17 @@
1
+ require "rabbit/task/slide"
2
+
3
+ # Edit ./config.yaml to customize meta data
4
+
5
+ spec = nil
6
+ Rabbit::Task::Slide.new do |task|
7
+ spec = task.spec
8
+ # spec.files += Dir.glob("doc/**/*.*")
9
+ # spec.files -= Dir.glob("private/**/*.*")
10
+ spec.add_runtime_dependency("rabbit-theme-clear-code")
11
+ end
12
+
13
+ desc "Tag #{spec.version}"
14
+ task :tag do
15
+ sh("git", "tag", "-a", spec.version.to_s, "-m", "Publish #{spec.version}")
16
+ sh("git", "push", "--tags")
17
+ end
@@ -0,0 +1,319 @@
1
+ = Apache Arrow Flight SQLでPostgreSQLをもっと速く!
2
+
3
+ : author
4
+ 須藤功平
5
+ : institution
6
+ 株式会社クリアコード
7
+ : content-source
8
+ PostgreSQL Conference Japan 2023
9
+ : date
10
+ 2023-11-24
11
+ : start-time
12
+ 2023-11-24T14:10:00+09:00
13
+ : end-time
14
+ 2023-11-24T15:00:00+09:00
15
+ : theme
16
+ clear-code
17
+
18
+ = 対象ユースケース
19
+
20
+ * ETL/ELT (Extract, Transform, Load)
21
+ * PostgreSQLからの大量データの読み込み
22
+ * PostgreSQLへの大量データの書き込み
23
+ * 探索的データ分析
24
+ * PostgreSQL内のデータを理解
25
+ * サブセットをローカルにダウンロードし、\n
26
+ インタラクティブに集計・加工・可視化など
27
+
28
+ = 対象ユースケースの特徴
29
+
30
+ * 大量ローカルデータ→PostgreSQLデータ
31
+ * 大量PostgreSQLデータ→ローカルデータ
32
+
33
+ = 対象ユースケースの処理
34
+
35
+ # mermaid
36
+ # relative_height = 100
37
+ sequenceDiagram
38
+ participant L as ローカル
39
+ participant P as PostgreSQL
40
+ alt ロード
41
+ note left of L: INSERT/COPY用にデータを変換
42
+ L->>P: データ送信
43
+ note right of P: データ保存
44
+ else 抽出
45
+ P->>L: データ送信
46
+ note left of L: ローカル用にデータを変換
47
+ end
48
+
49
+ == Slide properties
50
+
51
+ : enable-title-on-image
52
+ false
53
+
54
+ = 注目ポイント
55
+
56
+ # mermaid
57
+ # relative_height = 100
58
+ # draw0 = [rectangle, false, 0.075, 0.25, 0.34, 0.105, {color: "#0041ab", line_width: 3, dash: [[1, 6], 0]}]
59
+ # draw1 = [rectangle, false, 0.125, 0.69, 0.29, 0.105, {color: "#0041ab", line_width: 3, dash: [[1, 6], 0]}]
60
+ # draw2 = [text, 遅い, 0.2, 0.5, {color: "#0041ab", size: 50}]
61
+ # draw3 = [rectangle, false, 0.43, 0.36, 0.49, 0.17, {color: "#458cff", line_width: 3, dash: [[1, 12], 0]}]
62
+ # draw4 = [rectangle, false, 0.43, 0.63, 0.27, 0.1, {color: "#458cff", line_width: 3, dash: [[1, 12], 0]}]
63
+ # draw5 = [text, 速い, 0.77, 0.63, {color: "#458cff", size: 50}]
64
+
65
+ sequenceDiagram
66
+ participant L as ローカル
67
+ participant P as PostgreSQL
68
+ alt ロード
69
+ note left of L: INSERT/COPY用にデータを変換
70
+ L->>P: データ送信
71
+ note right of P: データ保存
72
+ else 抽出
73
+ P->>L: データ送信
74
+ note left of L: ローカル用にデータを変換
75
+ end
76
+
77
+ == Slide properties
78
+
79
+ : enable-title-on-image
80
+ false
81
+
82
+ = なぜ遅いのか
83
+
84
+ * ((*データ変換*))が必要だから
85
+ * ロード:
86
+ * (({INSERT}))/(({COPY}))用に((*データ変換*))
87
+ * 抽出:
88
+ * PostgreSQL独自フォーマットの((*パース*))
89
+
90
+ = 高速化アプローチ
91
+
92
+ (('tag:center'))
93
+ (('tag:x-large'))
94
+ 低データ変換コストの\n
95
+ フォーマットを使う
96
+
97
+ (('wait'))
98
+ (('tag:center'))
99
+ (('tag:x-large'))
100
+ ↓\n
101
+ ((*Apache Arrow*))
102
+
103
+ = 自己紹介
104
+
105
+ * 須藤功平/(('font-awesome:github-square'))@kou/(('font-awesome:twitter-square'))@ktou
106
+ * Apache Arrowのコミット数1位
107
+ * Apache Arrowの3代目PMC代表\n
108
+ (('note:PMC:プロジェクト管理委員会'))
109
+
110
+ # image
111
+ # src = http://www.gravatar.com/avatar/ee6ffca720cc428d70247dcd7377dd48.jpeg?s=800
112
+ # align = right
113
+ # vertical-align = top
114
+ # relative-width = 30
115
+ # relative-margin-right = -10
116
+ # relative-margin-bottom = 0.5
117
+ # caption-font-size = 1
118
+
119
+ = Apache Arrow
120
+
121
+ * 高速データ交換用フォーマット
122
+ * パースコストほぼ0
123
+ * データ転送コストのみで交換できる
124
+
125
+ = 高速化ポイント
126
+
127
+ # mermaid
128
+ # relative_height = 100
129
+ # draw0 = [rectangle, false, 0.075, 0.25, 0.34, 0.105, {color: "#458cff", line_width: 3, dash: [[1, 12], 0]}]
130
+ # draw1 = [rectangle, false, 0.125, 0.69, 0.29, 0.105, {color: "#458cff", line_width: 3, dash: [[1, 12], 0]}]
131
+ # draw2 = [text, 速くなる!, 0.13, 0.5, {color: "#458cff", size: 50}]
132
+
133
+ sequenceDiagram
134
+ participant L as ローカル
135
+ participant P as PostgreSQL
136
+ alt ロード
137
+ note left of L: INSERT/COPY用にデータを変換
138
+ L->>P: データ送信
139
+ note right of P: データ保存
140
+ else 抽出
141
+ P->>L: データ送信
142
+ note left of L: ローカル用にデータを変換
143
+ end
144
+
145
+ == Slide properties
146
+
147
+ : enable-title-on-image
148
+ false
149
+
150
+ = 実現方法
151
+
152
+ * PostgreSQLプロトコルで\n
153
+ Apache Arrowを扱えるようにする
154
+ * (({COPY}))の(({FORMAT}))でApache Arrowサポート
155
+ * Apache Arrowを扱える\n
156
+ 別のプロトコルを使う
157
+
158
+ = (({COPY}))でApache Arrow
159
+
160
+ * メリット:
161
+ * 既存の仕組み・ツールを使える
162
+ * デメリット:
163
+ * PostgreSQL開発者は受け入れてくれるのか?
164
+
165
+ = Apache Arrow対応の別プロトコル
166
+
167
+ * メリット:
168
+ * PostgreSQLの拡張機能で実現すれば\n
169
+ PostgreSQLとは独立して開発できる
170
+ * デメリット:
171
+ * 既存の仕組み・ツールを使えない
172
+
173
+ = 選んだ方法
174
+
175
+ (('tag:center'))
176
+ (('tag:x-large'))
177
+ Apache Arrow対応の\n
178
+ 別プロトコル
179
+
180
+ (('wait'))
181
+ (('tag:center'))
182
+ (('tag:x-large'))
183
+ ↓\n
184
+ ((*Apache Arrow\nFlight SQL*))
185
+
186
+ = Apache Arrow Flight SQL
187
+
188
+ * クエリー言語:SQL
189
+ * PostgreSQLになじむ
190
+ * データフォーマット:Apache Arrow
191
+ * 高速化できる
192
+ * ベースのプロトコル:gRPC
193
+ * 既存の仕組みを再利用できる
194
+
195
+ (('note:注意:まだexperimentalなプロトコル'))
196
+
197
+ = 別プロトコルを選んだ理由
198
+
199
+ * Apache Arrowでこの問題を解決できるか\n
200
+ 手早く検証したい
201
+ * PostgreSQL開発者と相談するには\n
202
+ Apache Arrowでどのくらい改善するかの\n
203
+ データが必要
204
+ * このアプローチでの実績をもって\n
205
+ PostgreSQL開発者と相談したい
206
+
207
+ = 実現方法
208
+
209
+ * PostgreSQLの拡張機能として実装
210
+ * Apache Arrow Flight SQL adapter for PostgreSQL\n
211
+ (('note:(プロジェクト名が長い!以後AFSと省略)'))
212
+ * 難しいところ:
213
+ * PostgreSQLにはプロトコルを拡張する仕組みはない\n
214
+ (('note:(MySQLにはある)'))
215
+ * Apache Arrow Flight SQLのライブラリーは\n
216
+ プロセスベースではなくスレッドベース\n
217
+ (('note:(PostgreSQLはプロセスベース)'))
218
+
219
+ = 新プロトコル対応方法:PostgREST
220
+
221
+ # mermaid
222
+ # relative_height = 100
223
+
224
+ sequenceDiagram
225
+ actor U as ユーザー
226
+ participant PR as PostgREST
227
+ participant P as PostgreSQL
228
+ U->>PR: HTTP
229
+ PR->>P: PostgreSQLプロトコル
230
+ P->>PR: PostgreSQLプロトコル
231
+ PR->>U: HTTP
232
+
233
+ == Slide properties
234
+
235
+ : enable-title-on-image
236
+ false
237
+
238
+ = 新プロトコル対応方法:AFS
239
+
240
+ # mermaid
241
+ # relative_height = 100
242
+
243
+ sequenceDiagram
244
+ actor U as ユーザー
245
+ participant P as PostgreSQL
246
+ participant AFS as AFS
247
+ P->>AFS: ワーカープロセス起動
248
+ U->>AFS: Apache Arrow Flight SQL
249
+ AFS->>U: Apache Arrow Flight SQL
250
+
251
+ == Slide properties
252
+
253
+ : enable-title-on-image
254
+ false
255
+
256
+ = 並列方法
257
+
258
+ * PostgreSQL:プロセスベース
259
+ * 同時実行は別プロセスとして実行
260
+ * Apache Arrow Flight SQL:スレッドベース
261
+ * 同時実行は別スレッドとして実行
262
+ * マルチプロセス×マルチスレッド
263
+ * 混ぜるな危険!
264
+ * 対策:マルチスレッドのプロセスを分離して\n
265
+ そのプロセスはPostgreSQLのAPIを使わない
266
+
267
+ = 並列方法:AFS
268
+
269
+ # mermaid
270
+ # relative_height = 100
271
+ # draw0 = [text, マルチスレッド, 0.54, 0.15, {color: "#0041ab", size: 30}]
272
+ # draw1 = [text, PGのAPIを使わない, 0.54, 0.2, {color: "#0041ab", size: 30}]
273
+ # draw2 = [text, Apache Arrowフォーマット, 0.57, 0.75, {color: "#0041ab", size: 30}]
274
+ # draw3 = [text, 低コスト!, 0.66, 0.82, {color: "#0041ab", size: 30}]
275
+ # draw4 = [text, 低コスト!, 0.06, 0.82, {color: "#0041ab", size: 30}]
276
+
277
+ sequenceDiagram
278
+ actor U as ユーザー
279
+ participant P as PostgreSQL
280
+ participant AFSm as AFS main
281
+ participant AFSs as AFS server
282
+ participant AFSe as AFS executor
283
+ P->>AFSm: 起動
284
+ AFSm->>AFSs: 起動
285
+ U->>AFSs: Apache Arrow Flight SQL
286
+ AFSs->>AFSm: executor起動依頼
287
+ AFSm->>AFSe: 起動
288
+ AFSs->>AFSe: 実行依頼
289
+ note right of AFSe: 実行
290
+ AFSe->>AFSs: 結果返却
291
+ AFSs->>U: Apache Arrow Flight SQL
292
+
293
+ == Slide properties
294
+
295
+ : enable-title-on-image
296
+ false
297
+
298
+ # = Apache Arrow Flight SQL
299
+
300
+ # = 認証
301
+
302
+ = まとめ
303
+
304
+ * 課題:
305
+ * 大量データの読み書きが遅い
306
+ * 解決方法:
307
+ * Apache Arrowフォーマットの使用
308
+ * Apache Arrow Flight SQLの使用
309
+
310
+ = サポート
311
+
312
+ * コミュニティー:
313
+ * (('note:((<URL:https://github.com/apache/arrow-flight-sql-postgresql/issues>))'))
314
+ * (('note:((<URL:https://arrow.apache.org/community/#mailing-lists>))'))
315
+ * クリアコードによる有償サポート:
316
+ * (('note:((<URL:https://www.clear-code.com/contact/>))'))
317
+ * PGroongaのサポートも可\n
318
+ (('note:PGroonga:PostgreSQLに高速日本語全文検索機能を追加'))
319
+
data/config.yaml ADDED
@@ -0,0 +1,25 @@
1
+ ---
2
+ id: postgresql-conference-japan-2023
3
+ base_name: apache-arrow-flight-sql-postgresql
4
+ tags:
5
+ - rabbit
6
+ - arrow
7
+ - postgresql
8
+ presentation_date: 2023-11-24
9
+ version: 2023.11.24.0
10
+ licenses:
11
+ - CC-BY-SA-4.0
12
+ slideshare_id:
13
+ speaker_deck_id:
14
+ vimeo_id:
15
+ youtube_id:
16
+ width: 1920
17
+ height: 1080
18
+ source_code_uri: "https://gitlab.com/ktou/rabbit-slide-kou-postgresql-conference-japan-2023"
19
+ author:
20
+ markup_language: :rd
21
+ name: 須藤功平
22
+ email: kou@clear-code.com
23
+ rubygems_user: kou
24
+ slideshare_user:
25
+ speaker_deck_user: kou
metadata ADDED
@@ -0,0 +1,79 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rabbit-slide-kou-postgresql-conference-japan-2023
3
+ version: !ruby/object:Gem::Version
4
+ version: 2023.11.24.0
5
+ platform: ruby
6
+ authors:
7
+ - 須藤功平
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2023-10-31 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rabbit
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 2.0.2
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: 2.0.2
27
+ - !ruby/object:Gem::Dependency
28
+ name: rabbit-theme-clear-code
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ description: PostgreSQLとの接続には独自プロトコルが使われていますが、やりとりするデータが大きくなるとクエリーの処理ではなくこのプロトコルがボトルネックになることが知られています。Apache
42
+ ArrowFlight SQLプロトコルはこのボトルネックを解消できるプロトコルです。Apache Arrow Flight SQLの詳細、どのくらい速くなるのか、プロトコルを拡張する仕組みのないPostgreSQLでどのように実装したのかといった実装の詳細を紹介します。
43
+ email:
44
+ - kou@clear-code.com
45
+ executables: []
46
+ extensions: []
47
+ extra_rdoc_files: []
48
+ files:
49
+ - ".rabbit"
50
+ - README.rd
51
+ - Rakefile
52
+ - apache-arrow-flight-sql-postgresql.rab
53
+ - config.yaml
54
+ - pdf/postgresql-conference-japan-2023-apache-arrow-flight-sql-postgresql.pdf
55
+ homepage: https://slide.rabbit-shocker.org/authors/kou/postgresql-conference-japan-2023/
56
+ licenses:
57
+ - CC-BY-SA-4.0
58
+ metadata:
59
+ source_code_uri: https://gitlab.com/ktou/rabbit-slide-kou-postgresql-conference-japan-2023
60
+ post_install_message:
61
+ rdoc_options: []
62
+ require_paths:
63
+ - lib
64
+ required_ruby_version: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ required_rubygems_version: !ruby/object:Gem::Requirement
70
+ requirements:
71
+ - - ">="
72
+ - !ruby/object:Gem::Version
73
+ version: '0'
74
+ requirements: []
75
+ rubygems_version: 3.5.0.dev
76
+ signing_key:
77
+ specification_version: 4
78
+ summary: Apache Arrow Flight SQLでPostgreSQLをもっと速く!
79
+ test_files: []