Slide 1

Slide 1 text

フォルシアにおけるPostgreSQLの活用
 高橋 優樹
 2022/02/15 FORCIA Meetup #4


Slide 2

Slide 2 text

自己紹介 ● 高橋 優樹 (Yuki Takahashi) ○ 新卒3年目 ○ 旅行会社向け 商品登録システムの開発 ○ 技術広報チームリーダー ● マイブーム ○ サウナ ○ スノーボード 2

Slide 3

Slide 3 text

フォルシアのメインDBはPostgreSQLです 3

Slide 4

Slide 4 text

4 フォルシアと検索 https://www.forcia.com/technology/ フォルシアは「膨大で複雑なデータ」の高速検索 
 が強みです。
 ・属性による絞り込み検索 
 ・全文検索
 ・ファセットカウント
 ・複雑なデータ間の関係を考慮した検索 
 これらの実現にPostgreSQLは必要不可欠 


Slide 5

Slide 5 text

5 PostgreSQLのここがいいよ3選 RDBならではの柔軟なテーブル設計
 複雑なデータ間の関係を表現可能
 
 c言語による関数の拡張が可能
 組み込み関数では実現できない処理を高速に実行可能
 
 OSSなので無料で利用可能
 クラウドでも利用しやすい


Slide 6

Slide 6 text

6 1. RDBならではの柔軟なテーブル設計 ホテル
 客室
 プラン
 料金
 在庫
 販売単位
 ×
 365日
 例) 旅行会社が扱う素材のデータ 


Slide 7

Slide 7 text

7 1. RDBならではの柔軟なテーブル設計 ホテル
 客室
 プラン
 料金
 在庫
 販売単位
 ×
 365日
 現地素材
 飛行機
 新幹線
 その他素材
 例) 旅行会社が扱う素材のデータ 
 ×


Slide 8

Slide 8 text

8 1. RDBならではの柔軟なテーブル設計 ホテル
 客室
 プラン
 料金
 在庫
 販売単位
 ×
 365日
 現地素材
 飛行機
 新幹線
 その他素材
 契約情報
 販売停止情報
 その他情報
 例) 旅行会社が扱う素材のデータ 
 ×
 ×


Slide 9

Slide 9 text

9 1. RDBならではの柔軟なテーブル設計 ホテル
 客室
 プラン
 料金
 在庫
 販売単位
 ×
 365日
 現地素材
 飛行機
 新幹線
 その他素材
 契約情報
 販売停止情報
 その他情報
 例) 旅行会社が扱う素材のデータ 
 ×
 ×
 販売可能な条件の判定が非常に複雑 → 複雑な関係を表現できるRDBが適している

Slide 10

Slide 10 text

10 https://www.postgresql.jp/document/13/html/xfunc.html 2.c言語による関数の拡張

Slide 11

Slide 11 text

11 2.c言語による関数の拡張 登録
 C言語で関数を実装 
 soファイルを元に、PostgreSQL側で 関数を登録
 SQLで実行可能
 コンパイル
 plus_one.so


Slide 12

Slide 12 text

12 c言語関数活用の例 ● c言語で関数を実装すると、組み込み関数を組み合わせて処理を 実行するより高速に実行できる場合がある
 ● テーブルをあえて正規化せず、データを配列で持たせる
 ○ 組み込み関数では配列の操作が不十分なので、c言語によっ て拡張しています
 ○ 一般的なセオリーからは外れますが、社内に蓄積されたノウ ハウやライブラリによって実現しています
 ● 顧客ごとの検索ロジックをc言語関数にまとめることで、処理の見 通しをよくし、処理を高速化する


Slide 13

Slide 13 text

3. OSSなので無料で利用可能 ● コストが抑えられるため、顧客への導入障壁も低い
 ● クラウドでのスケーラブルな構成にも向いている
 ○ Kubernetesと組み合わせての利用例もあります
 ● 更新も活発


Slide 14

Slide 14 text

今後の展望 14

Slide 15

Slide 15 text

15 https://www.forcia.com/blog/001560.html 拡張関数をRustで実装 → c言語のメンテナンス性の低さをカバー 
 今後の展望 RDS × plv8 → AWS RDSがplv8をサポート! 
 https://docs.aws.amazon.com/ja_jp/ AmazonRDS/latest/UserGuide/CHA P_PostgreSQL.html

Slide 16

Slide 16 text

続きは残りのLTで! 16

Slide 17

Slide 17 text

EOF