「FORCIA Meetup #4 高速検索を支えるPostgreSQLのノウハウ」の資料です
フォルシアにおけるPostgreSQLの活用 高橋 優樹 2022/02/15 FORCIA Meetup #4
View Slide
自己紹介● 高橋 優樹 (Yuki Takahashi)○ 新卒3年目○ 旅行会社向け 商品登録システムの開発○ 技術広報チームリーダー● マイブーム○ サウナ○ スノーボード2
フォルシアのメインDBはPostgreSQLです3
4フォルシアと検索https://www.forcia.com/technology/フォルシアは「膨大で複雑なデータ」の高速検索 が強みです。 ・属性による絞り込み検索 ・全文検索 ・ファセットカウント ・複雑なデータ間の関係を考慮した検索 これらの実現にPostgreSQLは必要不可欠
5PostgreSQLのここがいいよ3選RDBならではの柔軟なテーブル設計 複雑なデータ間の関係を表現可能 c言語による関数の拡張が可能 組み込み関数では実現できない処理を高速に実行可能 OSSなので無料で利用可能 クラウドでも利用しやすい
61. RDBならではの柔軟なテーブル設計ホテル 客室 プラン 料金 在庫 販売単位 × 365日 例) 旅行会社が扱う素材のデータ
71. RDBならではの柔軟なテーブル設計ホテル 客室 プラン 料金 在庫 販売単位 × 365日 現地素材 飛行機 新幹線 その他素材 例) 旅行会社が扱う素材のデータ ×
81. RDBならではの柔軟なテーブル設計ホテル 客室 プラン 料金 在庫 販売単位 × 365日 現地素材 飛行機 新幹線 その他素材 契約情報 販売停止情報 その他情報 例) 旅行会社が扱う素材のデータ × ×
91. RDBならではの柔軟なテーブル設計ホテル 客室 プラン 料金 在庫 販売単位 × 365日 現地素材 飛行機 新幹線 その他素材 契約情報 販売停止情報 その他情報 例) 旅行会社が扱う素材のデータ × × 販売可能な条件の判定が非常に複雑→ 複雑な関係を表現できるRDBが適している
10https://www.postgresql.jp/document/13/html/xfunc.html2.c言語による関数の拡張
112.c言語による関数の拡張登録 C言語で関数を実装 soファイルを元に、PostgreSQL側で関数を登録 SQLで実行可能 コンパイル plus_one.so
12c言語関数活用の例● c言語で関数を実装すると、組み込み関数を組み合わせて処理を実行するより高速に実行できる場合がある ● テーブルをあえて正規化せず、データを配列で持たせる ○ 組み込み関数では配列の操作が不十分なので、c言語によって拡張しています ○ 一般的なセオリーからは外れますが、社内に蓄積されたノウハウやライブラリによって実現しています ● 顧客ごとの検索ロジックをc言語関数にまとめることで、処理の見通しをよくし、処理を高速化する
3. OSSなので無料で利用可能● コストが抑えられるため、顧客への導入障壁も低い ● クラウドでのスケーラブルな構成にも向いている ○ Kubernetesと組み合わせての利用例もあります ● 更新も活発
今後の展望14
15https://www.forcia.com/blog/001560.html拡張関数をRustで実装→ c言語のメンテナンス性の低さをカバー 今後の展望RDS × plv8→ AWS RDSがplv8をサポート! https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/CHAP_PostgreSQL.html
続きは残りのLTで!16
EOF