Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up for free
PostgreSQL開発とテスト
forcia_dev_pr
February 21, 2022
Programming
0
190
PostgreSQL開発とテスト
「FORCIA Meetup #4 高速検索を支えるPostgreSQLのノウハウ」の資料です
forcia_dev_pr
February 21, 2022
Tweet
Share
More Decks by forcia_dev_pr
See All by forcia_dev_pr
フォルシアのフレームワークとTypeScript
forcia_dev_pr
0
26
TypeScript(WebGL)+React+Viteで、さくっとGeodesic Polyhedronを描画してみた
forcia_dev_pr
0
16
RedCoderがTypeScriptで競技プログラミングに挑戦して挫折した話
forcia_dev_pr
0
20
エンジニア募集 ~技術は「売れて」初めて価値となる~
forcia_dev_pr
0
73
Gitlab CIでMRを自動生成する
forcia_dev_pr
0
290
フォルシアにおけるPostgreSQLの活用
forcia_dev_pr
0
180
PostgreSQL vs Elasticsearch -ファセットカウント編-
forcia_dev_pr
0
230
そのSQL、もっと速くなりますよ。
forcia_dev_pr
0
210
AWS LambdaでのRust利用
forcia_dev_pr
1
280
Other Decks in Programming
See All in Programming
Step Functions Distributed Map を使ってみた
codemountains
0
100
Zynq MP SoC で楽しむエッジコンピューティング ~RTLプログラミングのススメ~
ryuz88
0
260
(新米)エンジニアリングマネージャーのしごと #RSGT2023
murabayashi
9
5.4k
An Advanced Introduction to R
nicetak
0
1.7k
Milestoner
bkuhlmann
1
240
中小企業開発事例から見るサーバーレス
seike460
PRO
4
1.5k
なぜRubyコミュニティにコミットするのか?
luccafort
0
300
Qiita Night PHP 2023
fuwasegu
0
830
ipa-medit: Memory search and patch tool for IPA without Jailbreaking/ipa-medit-bh2022-europe
tkmru
0
130
Remix + Cloudflare Pages + D1 で ポケモン SV のレンタルチームを検索できるアプリを作ってみた
kuroppe1819
4
1.3k
PHPDocにおける配列の型定義を少し知る
shimabox
1
120
WordPress(再)入門 - 基礎知識・環境編
oleindesign
1
120
Featured
See All Featured
How GitHub Uses GitHub to Build GitHub
holman
465
280k
5 minutes of I Can Smell Your CMS
philhawksworth
198
18k
Intergalactic Javascript Robots from Outer Space
tanoku
261
26k
Embracing the Ebb and Flow
colly
75
3.6k
Six Lessons from altMBA
skipperchong
15
2.3k
The Cult of Friendly URLs
andyhume
68
5.1k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
349
27k
YesSQL, Process and Tooling at Scale
rocio
159
12k
VelocityConf: Rendering Performance Case Studies
addyosmani
317
22k
Adopting Sorbet at Scale
ufuk
65
7.8k
What's in a price? How to price your products and services
michaelherold
233
9.7k
How to Ace a Technical Interview
jacobian
270
21k
Transcript
PostgreSQL開発とテスト 吉田 侑弥 @フォルシア株式会社 2022.02.15 FORCIA Meetup#4
自己紹介 • 吉田 侑弥 (Yuya Yoshida) • ソフトウェアエンジニア@フォルシア株式会社 ◦ webアプリケーション
(TypeScript, Node.js, React, Next.js, NestJS, PostgreSQL) ◦ 大規模アプリ開発 ◦ パフォーマンスチューニング 2
DB関連のテストは(比較的)大変 • 一般的には ◦ アプリと比較して環境構築のコストが高い ◦ 作業者間の差異がない環境下のテスト(再現性の担保)が難しい • フォルシアでは以下のような工程が多い ◦
元のデータを検索用データに加工する(バッチSQL) ◦ データから必要なデータを高速に抽出する(オンラインSQL) ◦ 汎用的なモジュール開発(拡張機能やユーザー定義関数) →比較的テストの実施が容易な環境 3
テスト観点① • バッチSQL ◦ バッチ処理が正常終了するか ◦ 処理が意図した通りか • オンラインSQL ◦
正しいSQL文が生成されるか ◦ クエリが意図した通りか 4
テスト観点①…実施パターン • バッチSQL ◦ バッチ処理が正常終了するか → テストデータでバッチ実行 ◦ 処理が意図した通りか →
結合テスト • オンラインSQL ◦ 正しいSQL文が生成されるか → スナップショットテスト ◦ クエリが意図した通りか → 結合テスト 5
6 (補足)JSのテスト環境(Jest + Frisby) 6 • Jest: JSのテストフレームワーク • Frisby:
Jest上で動くAPIテスト フレームワーク • SQL文の生成はJest単体、結合テス トはJest + Frisbyで実施
拡張機能とは • postgreSQLは拡張性の高いRDBMS • フォルシアでも多くの拡張機能を活用 • 外部ツール ◦ pg_bigm, pg_bulkload
etc… • 自社ツール ◦ ユーザー定義関数(C言語) etc… 7
テスト観点② • 拡張機能・ユーザー定義関数 ◦ 正しく導入できるか ◦ 意図した結果を得られるか 8
テスト観点②…実施パターン • 拡張機能・ユーザー定義関数 ◦ 正しく導入できるか →仮想環境 (docker) でのビルド、インストール ◦ 意図した結果を得られるか
→リグレッションテスト 9
仮想環境 (docker) でのビルド • 新規プロジェクトの多くは仮想環境でDBサーバーを用意 →社内共通のpostgreSQLイメージを利用 • 汎用モジュール開発時 ◦ 共通イメージ環境下でのビルド、テスト(推奨)
10
pg_regress • postgreSQL標準のリグレッションテストツール • 実行すると一時的にサーバーが起動し、テスト用のDBが生成される • 予めSQL文と実行結果の準備が必要 11
DBテストとCI • これまで挙げたテストは全て手元だけでなくCIでも実行 ◦ DB周りの処理はどうしても環境の差異が出やすい CIでエラー検知するケースは体感かなり多い • ただし、ある程度マシンパワーと時間が必要 →時には実行タイミングをある程度制御することも e.g.
ビルドはmaster merge時のみ、バッチ処理は定時実行 等々… 12
現在議論中の内容 • SQLのsyntax check ◦ DBサーバーを介さずにチェックができると嬉しい ◦ pglast等を活用して実現できそう? • パフォーマンステスト
◦ 拡張や関数の効果を定量的に測定したい ◦ 実現方法を模索中 13
EOF