Upgrade to Pro — share decks privately, control downloads, hide ads and more …

PostgreSQL開発とテスト

 PostgreSQL開発とテスト

「FORCIA Meetup #4 高速検索を支えるPostgreSQLのノウハウ」の資料です

forcia_dev_pr

February 21, 2022
Tweet

More Decks by forcia_dev_pr

Other Decks in Programming

Transcript

  1. PostgreSQL開発とテスト
 吉田 侑弥 @フォルシア株式会社
 2022.02.15 FORCIA Meetup#4


  2. 自己紹介 • 吉田 侑弥 (Yuya Yoshida) • ソフトウェアエンジニア@フォルシア株式会社 ◦ webアプリケーション

    (TypeScript, Node.js, React, Next.js, NestJS, PostgreSQL) ◦ 大規模アプリ開発 ◦ パフォーマンスチューニング 2
  3. DB関連のテストは(比較的)大変 • 一般的には ◦ アプリと比較して環境構築のコストが高い ◦ 作業者間の差異がない環境下のテスト(再現性の担保)が難しい • フォルシアでは以下のような工程が多い ◦

    元のデータを検索用データに加工する(バッチSQL) ◦ データから必要なデータを高速に抽出する(オンラインSQL) ◦ 汎用的なモジュール開発(拡張機能やユーザー定義関数) →比較的テストの実施が容易な環境 3
  4. テスト観点① • バッチSQL ◦ バッチ処理が正常終了するか ◦ 処理が意図した通りか • オンラインSQL ◦

    正しいSQL文が生成されるか ◦ クエリが意図した通りか 4
  5. テスト観点①…実施パターン • バッチSQL ◦ バッチ処理が正常終了するか  → テストデータでバッチ実行 ◦ 処理が意図した通りか  →

    結合テスト • オンラインSQL ◦ 正しいSQL文が生成されるか  → スナップショットテスト ◦ クエリが意図した通りか  → 結合テスト 5
  6. 6 (補足)JSのテスト環境(Jest + Frisby) 6 • Jest: JSのテストフレームワーク • Frisby:

    Jest上で動くAPIテスト フレームワーク • SQL文の生成はJest単体、結合テス トはJest + Frisbyで実施
  7. 拡張機能とは • postgreSQLは拡張性の高いRDBMS • フォルシアでも多くの拡張機能を活用 • 外部ツール ◦ pg_bigm, pg_bulkload

    etc… • 自社ツール ◦ ユーザー定義関数(C言語) etc… 7
  8. テスト観点② • 拡張機能・ユーザー定義関数 ◦ 正しく導入できるか ◦ 意図した結果を得られるか 8

  9. テスト観点②…実施パターン • 拡張機能・ユーザー定義関数 ◦ 正しく導入できるか  →仮想環境 (docker) でのビルド、インストール ◦ 意図した結果を得られるか

     →リグレッションテスト 9
  10. 仮想環境 (docker) でのビルド • 新規プロジェクトの多くは仮想環境でDBサーバーを用意 →社内共通のpostgreSQLイメージを利用 • 汎用モジュール開発時 ◦ 共通イメージ環境下でのビルド、テスト(推奨)

    10
  11. pg_regress • postgreSQL標準のリグレッションテストツール • 実行すると一時的にサーバーが起動し、テスト用のDBが生成される • 予めSQL文と実行結果の準備が必要 11

  12. DBテストとCI • これまで挙げたテストは全て手元だけでなくCIでも実行 ◦ DB周りの処理はどうしても環境の差異が出やすい CIでエラー検知するケースは体感かなり多い • ただし、ある程度マシンパワーと時間が必要 →時には実行タイミングをある程度制御することも e.g.

    ビルドはmaster merge時のみ、バッチ処理は定時実行 等々… 12
  13. 現在議論中の内容 • SQLのsyntax check ◦ DBサーバーを介さずにチェックができると嬉しい ◦ pglast等を活用して実現できそう? • パフォーマンステスト

    ◦ 拡張や関数の効果を定量的に測定したい ◦ 実現方法を模索中 13
  14. EOF