Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
フォルシアにおけるPostgreSQLの活用
Search
forcia_dev_pr
February 21, 2022
Programming
0
490
フォルシアにおける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
第7回ゆるふわオンサイト解説
forcia_dev_pr
0
220
第6回ゆるふわオンサイト解説
forcia_dev_pr
0
220
よくわかるFORCIAのエンジニア旅行SaaSプロダクト開発編
forcia_dev_pr
0
720
よくわかるフォルシアのエンジニア 新卒採用編
forcia_dev_pr
0
3.6k
第5回ゆるふわオンサイト解説
forcia_dev_pr
0
160
よくわかるフォルシアのエンジニア 旅行プラットフォーム部編
forcia_dev_pr
0
6.3k
React hooks を気合で理解する
forcia_dev_pr
0
400
k8sマニフェストを Typescriptで管理したい― cdk8s+を導入してみました ―
forcia_dev_pr
0
370
第4回ゆるふわ競技プログラミングオンサイト解説
forcia_dev_pr
0
550
Other Decks in Programming
See All in Programming
TypeScript Language Service Plugin で CSS Modules の開発体験を改善する
mizdra
PRO
3
2.4k
#QiitaBash TDDでAIに設計イメージを伝える
ryosukedtomita
2
1.6k
「MCPを使ってる人」が より詳しくなるための解説
yamaguchidesu
0
590
【TSkaigi 2025】これは型破り?型安全? 真実はいつもひとつ!(じゃないかもしれない)TypeScript クイズ〜〜〜〜!!!!!
kimitashoichi
1
300
rbs-traceを使ってWEARで型生成を試してみた After RubyKaigi 2025〜ZOZO、ファインディ、ピクシブ〜 / tried rbs-trace on WEAR
oyamakei
0
1k
TypeScript を活かしてデザインシステム MCP を作る / #tskaigi_after_night
izumin5210
4
470
推論された型の移植性エラーTS2742に挑む
teamlab
PRO
0
150
External SecretsのさくらProvider初期実装を担当しています
logica0419
0
230
PT AI без купюр
v0lka
0
190
型安全なDrag and Dropの設計を考える
yudppp
5
660
がんばりすぎないコーディングルール運用術
tsukakei
1
180
技術懸念に立ち向かい 法改正を穏便に乗り切った話
pop_cashew
0
750
Featured
See All Featured
What’s in a name? Adding method to the madness
productmarketing
PRO
22
3.5k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
228
22k
Music & Morning Musume
bryan
47
6.5k
What's in a price? How to price your products and services
michaelherold
245
12k
4 Signs Your Business is Dying
shpigford
183
22k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
137
34k
The Invisible Side of Design
smashingmag
299
50k
Testing 201, or: Great Expectations
jmmastey
42
7.5k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
29
1.7k
Fontdeck: Realign not Redesign
paulrobertlloyd
84
5.5k
A Modern Web Designer's Workflow
chriscoyier
693
190k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
34
3k
Transcript
フォルシアにおけるPostgreSQLの活用 高橋 優樹 2022/02/15 FORCIA Meetup #4
自己紹介 • 高橋 優樹 (Yuki Takahashi) ◦ 新卒3年目 ◦ 旅行会社向け
商品登録システムの開発 ◦ 技術広報チームリーダー • マイブーム ◦ サウナ ◦ スノーボード 2
フォルシアのメインDBはPostgreSQLです 3
4 フォルシアと検索 https://www.forcia.com/technology/ フォルシアは「膨大で複雑なデータ」の高速検索 が強みです。 ・属性による絞り込み検索 ・全文検索 ・ファセットカウント
・複雑なデータ間の関係を考慮した検索 これらの実現にPostgreSQLは必要不可欠
5 PostgreSQLのここがいいよ3選 RDBならではの柔軟なテーブル設計 複雑なデータ間の関係を表現可能 c言語による関数の拡張が可能 組み込み関数では実現できない処理を高速に実行可能 OSSなので無料で利用可能 クラウドでも利用しやすい
6 1. RDBならではの柔軟なテーブル設計 ホテル 客室 プラン 料金 在庫 販売単位 ×
365日 例) 旅行会社が扱う素材のデータ
7 1. RDBならではの柔軟なテーブル設計 ホテル 客室 プラン 料金 在庫 販売単位 ×
365日 現地素材 飛行機 新幹線 その他素材 例) 旅行会社が扱う素材のデータ ×
8 1. RDBならではの柔軟なテーブル設計 ホテル 客室 プラン 料金 在庫 販売単位 ×
365日 現地素材 飛行機 新幹線 その他素材 契約情報 販売停止情報 その他情報 例) 旅行会社が扱う素材のデータ × ×
9 1. RDBならではの柔軟なテーブル設計 ホテル 客室 プラン 料金 在庫 販売単位 ×
365日 現地素材 飛行機 新幹線 その他素材 契約情報 販売停止情報 その他情報 例) 旅行会社が扱う素材のデータ × × 販売可能な条件の判定が非常に複雑 → 複雑な関係を表現できるRDBが適している
10 https://www.postgresql.jp/document/13/html/xfunc.html 2.c言語による関数の拡張
11 2.c言語による関数の拡張 登録 C言語で関数を実装 soファイルを元に、PostgreSQL側で 関数を登録 SQLで実行可能 コンパイル plus_one.so
12 c言語関数活用の例 • c言語で関数を実装すると、組み込み関数を組み合わせて処理を 実行するより高速に実行できる場合がある • テーブルをあえて正規化せず、データを配列で持たせる ◦ 組み込み関数では配列の操作が不十分なので、c言語によっ て拡張しています
◦ 一般的なセオリーからは外れますが、社内に蓄積されたノウ ハウやライブラリによって実現しています • 顧客ごとの検索ロジックをc言語関数にまとめることで、処理の見 通しをよくし、処理を高速化する
3. OSSなので無料で利用可能 • コストが抑えられるため、顧客への導入障壁も低い • クラウドでのスケーラブルな構成にも向いている ◦ Kubernetesと組み合わせての利用例もあります • 更新も活発
今後の展望 14
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
続きは残りのLTで! 16
EOF