$30 off During Our Annual Pro Sale. View Details »
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
フォルシアにおけるPostgreSQLの活用
Search
forcia_dev_pr
February 21, 2022
Programming
0
520
フォルシアにおける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
"書く文化"を仕組みで育てる──フォルシアの技術ブログ継続戦略
forcia_dev_pr
1
210
新しいおもちゃを見つけたい私がやっている情報収集
forcia_dev_pr
2
440
「Pythonの環境構築について」と記事作成で意識したこと
forcia_dev_pr
1
150
Neovim で VS Code みたいにコーディングする
forcia_dev_pr
1
180
なぜ・どうやって・何を書く? 〜技術記事を書く習慣の作り方〜
forcia_dev_pr
1
180
第8回ゆるふわオンサイト 解説スライド
forcia_dev_pr
0
120
第7回ゆるふわオンサイト解説
forcia_dev_pr
0
250
第6回ゆるふわオンサイト解説
forcia_dev_pr
0
260
よくわかるFORCIAのエンジニア旅行SaaSプロダクト開発編
forcia_dev_pr
0
910
Other Decks in Programming
See All in Programming
AIコーディングエージェント(Manus)
kondai24
0
210
Spinner 軸ズレ現象を調べたらレンダリング深淵に飲まれた #レバテックMeetup
bengo4com
0
120
AtCoder Conference 2025「LLM時代のAHC」
imjk
2
560
Socio-Technical Evolution: Growing an Architecture and Its Organization for Fast Flow
cer
PRO
0
390
Canon EOS R50 V と R5 Mark II 購入でみえてきた最近のデジイチ VR180 事情、そして VR180 静止画に活路を見出すまで
karad
0
130
脳の「省エネモード」をデバッグする ~System 1(直感)と System 2(論理)の切り替え~
panda728
PRO
0
110
Navigating Dependency Injection with Metro
l2hyunwoo
1
170
モデル駆動設計をやってみようワークショップ開催報告(Modeling Forum2025) / model driven design workshop report
haru860
0
280
Combinatorial Interview Problems with Backtracking Solutions - From Imperative Procedural Programming to Declarative Functional Programming - Part 2
philipschwarz
PRO
0
100
組み合わせ爆発にのまれない - 責務分割 x テスト
halhorn
1
160
Kotlin Multiplatform Meetup - Compose Multiplatform 외부 의존성 아키텍처 설계부터 운영까지
wisemuji
0
110
堅牢なフロントエンドテスト基盤を構築するために行った取り組み
shogo4131
8
2.5k
Featured
See All Featured
How to optimise 3,500 product descriptions for ecommerce in one day using ChatGPT
katarinadahlin
PRO
0
3.4k
The Illustrated Children's Guide to Kubernetes
chrisshort
51
51k
GraphQLの誤解/rethinking-graphql
sonatard
73
11k
BBQ
matthewcrist
89
9.9k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
1.7k
How STYLIGHT went responsive
nonsquared
100
6k
Leadership Guide Workshop - DevTernity 2021
reverentgeek
0
160
Scaling GitHub
holman
464
140k
How to Think Like a Performance Engineer
csswizardry
28
2.4k
Faster Mobile Websites
deanohume
310
31k
Utilizing Notion as your number one productivity tool
mfonobong
2
180
jQuery: Nuts, Bolts and Bling
dougneiner
65
8.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