Slide 1

Slide 1 text

sqlxからpgxへの移行を今はしない 判断をするまで 2024/05/20 #ししとうLT 株式会社HRBrain 岡田 光博

Slide 2

Slide 2 text

2 AGENDA ● 自己紹介 ● sqlxからpgxへの移行を考えたきっかけ ● 色々なGoのSQLライブラリ ● え、Query Insightsでできるじゃん! ● 今はしない判断 ● まとめ

Slide 3

Slide 3 text

自己紹介

Slide 4

Slide 4 text

4 自己紹介 ● 岡田光博(みつ) ● 新規プロダクトでバックエンド!(4月〜) ○ もともとは、フロントエンド(〜インターン) ● 最近の趣味 ○ カメラ ○ 音楽(最近は、R&B) ○ 食べ飲み歩く(三茶の混混ってところおすすめ) ● 最近引っ越しを考えてます!! ○ 家具・家電付きの家の家具は、捨てちゃ駄目らしい...ですw

Slide 5

Slide 5 text

sqlxからpgxへの移行を考えたきっかけ sqlxとpgxは、GoのSQLライブラリ

Slide 6

Slide 6 text

6 sqlxからpgxへの移行を考えたきっかけ 新規プロダクトで色々とやることがある中で・・ 「リリースまでにはログを出したい!」となった。 大きく3つのログ ● アクセスログ(いつアクセスしたとか) ● アプリケーションログ(エラーのスタックトレースとか) ● SQL操作ログ(DBでどんなSQLが実行されたかとか)

Slide 7

Slide 7 text

7 sqlxからpgxへの移行を考えたきっかけ 新規プロダクトで色々とやることがある中で・・ 「リリースまでにはログを出したい!」となった。 大きく3つのログ ● アクセスログ(いつアクセスしたとか) ● アプリケーションログ(エラーのスタックトレースとか) ● SQL操作ログ(DBでどんなSQLが実行されたかとか) ↓ 上記2つはDB関連ではないため、ミドルウェアへ。

Slide 8

Slide 8 text

8 sqlxからpgxへの移行を考えたきっかけ 新規プロダクトで色々とやることがある中で・・ 「リリースまでにはログを出したい!」となった。 大きく3つのログ ● アクセスログ(いつアクセスしたとか) ● アプリケーションログ(エラーのスタックトレースとか) ● SQL操作ログ(DBでどんなSQLが実行されたかとか) ↓ sqlxでは、Loggerを持たせることができない問題が発覚。

Slide 9

Slide 9 text

9 sqlxからpgxへの移行を考えたきっかけ 加えて、同タイミングにDBの設計見直しが入っていた。 ↓ この際、ライブラリから見直すのもアリ!という話になりました。

Slide 10

Slide 10 text

色々なGoのSQLライブラリ

Slide 11

Slide 11 text

11 色々なGoのSQLライブラリ どのSQLライブラリならLoggerを持たせられるのかの検討 ● database/sql ● pq ● sqlx ● pgx ● sqlc …etc.

Slide 12

Slide 12 text

12 色々なGoのSQLライブラリ どのSQLライブラリならLoggerを持たせられるのかの検討 ● database/sql ● pq ● sqlx ● pgx ● sqlc …etc.

Slide 13

Slide 13 text

13 色々なGoのSQLライブラリ どのSQLライブラリならLoggerを持たせられるのかの検討 ● database/sql ○ sqlパッケージはSQL(またはSQLライクな)データベース周りの汎用インタ フェースを提供します。(DeepL) そもそも・・・ GoでDBを扱う時は、database/sqlを使う。 database/sqlはPostgre以外のDBでも使える便利なもの(mysqlなど) よりPostgre機能によせるためにpq、pgx、sqlxを使ったりする。

Slide 14

Slide 14 text

14 色々なGoのSQLライブラリ どのSQLライブラリならLoggerを持たせられるのかの検討 ● pq ○ pqパッケージは、database/sqlパッケージ用の純粋なGo Postgresドラ イバです。(DeepL) ● sqlx ○ sqlx は、go の標準データベース/sqllibrary を拡張したライブラリです。 (DeepL) ● pgx ○ pgxはPostgreSQL用の純粋なGoドライバとツールキットです。(DeepL)

Slide 15

Slide 15 text

15 色々なGoのSQLライブラリ どのSQLライブラリならLoggerを持たせられるのかの検討 ● pq ○ Logger持てなさそう ● sqlx ○ Logger持てなさそう ● pgx ○ Logger持てそう pgxは、issueも盛り上がってるし、良いかも!

Slide 16

Slide 16 text

え、Query Insightsでできるじゃん!

Slide 17

Slide 17 text

17 え、Query Insightsでできるじゃん! ちょっと待った・・・ 同タイミングにDBの設計見直し=APIが全部置き換わる ライブラリを置き換えるチャンスではあるが、時間のロスも発生する!?

Slide 18

Slide 18 text

18 え、Query Insightsでできるじゃん! SQL操作ログを取得したかった背景 ● どんなSQLが実行されているのか。 ● クエリのパフォーマンスが明らかに悪い時に確認したい。 など それ、Query Insightsでできそう!!

Slide 19

Slide 19 text

19 え、Query Insightsでできるじゃん! Query Insightsだと取れないデータ どのユーザーがどの場所で何のクエリを実行したのか、など詳細なデータ取得。 ● あくまでDBで実行されたSQLなどを見れるだけ ● 詳細なデータを追いかけるには、Loggerにctxを持たせ、オブザーバビリティ ツール(Datadogとか)に流してあげる必要がある。

Slide 20

Slide 20 text

ライブラリとしては、pgx(+sqlc)が良いかもとなった。 しかし、DB設計の見直し=APIの切り直しということ。 ↑ ライブラリを変えて、既存にある実装を全部修正しても、APIごと変わってしまう (DBがガラッと変わるので) ↑ 既存実装のライブラリ置き換え、かなり時間ロスが発生しそう。 &Query Insightsという替えも見つかったし、今の問題ではなさそう。 20 今はしない判断

Slide 21

Slide 21 text

● Goには色々なSQLライブラリがある学び(初学者...笑) ○ 基本的なdatabase/sql + Postgre拡張 ● Query Insightsでpgxへの移行は今はしない判断ができた。 ● DBスキーマが決まったので開発進捗に応じて、移行も考えられるように! ● ↓ ● 実際、移行するとなると技術力もUpさせないと! ● 新社会人頑張ります〜!(引っ越しアドバイスくださいw) 21 まとめ

Slide 22

Slide 22 text

ご清聴ありがとうございました!