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
550
0
Share
フォルシアにおけるPostgreSQLの活用
「FORCIA Meetup #4 高速検索を支えるPostgreSQLのノウハウ」の資料です
forcia_dev_pr
February 21, 2022
More Decks by forcia_dev_pr
See All by forcia_dev_pr
"書く文化"を仕組みで育てる──フォルシアの技術ブログ継続戦略
forcia_dev_pr
1
270
新しいおもちゃを見つけたい私がやっている情報収集
forcia_dev_pr
2
480
「Pythonの環境構築について」と記事作成で意識したこと
forcia_dev_pr
1
190
Neovim で VS Code みたいにコーディングする
forcia_dev_pr
1
210
なぜ・どうやって・何を書く? 〜技術記事を書く習慣の作り方〜
forcia_dev_pr
1
220
第8回ゆるふわオンサイト 解説スライド
forcia_dev_pr
0
180
第7回ゆるふわオンサイト解説
forcia_dev_pr
0
280
第6回ゆるふわオンサイト解説
forcia_dev_pr
0
290
よくわかるFORCIAのエンジニア旅行SaaSプロダクト開発編
forcia_dev_pr
0
1.1k
Other Decks in Programming
See All in Programming
Agent Skills を社内で育てる仕組み作り
jackchuka
1
2.2k
AgentCore Optimizationを始めよう!
licux
3
260
WebAssembly を読み込むベストプラクティス 2026年春版 / Best Practices for Loading WebAssembly (Spring 2026)
petamoriken
5
1.1k
PHPでバイナリをパースして理解するASN.1
muno92
PRO
0
460
リセットCSSを1行消したらアクセシビリティが向上した話
pvcresin
4
520
AIを導入する前にやるべきこと
negima
2
370
空間オーディオの活用
objectiveaudio
0
160
Agentic AI & UI: Arcitecture, HITL, Emerging Standards
manfredsteyer
PRO
0
120
【ディップ|26年新卒研修資料】TDD実装演習
dip_tech
PRO
0
260
How We Practice Exploratory Testing in Iterative Development( #scrumniigata ) / 反復開発の中で、探索的テストをどう実施しているか
teyamagu
PRO
3
980
UaaL×Androidアプリのメモリ計測 — Memory Profilerの先へ
rio432
0
160
密結合なバックエンドから TypeScript のコードを生成する
kemuridama
1
260
Featured
See All Featured
How to Talk to Developers About Accessibility
jct
2
200
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.5k
Ruling the World: When Life Gets Gamed
codingconduct
0
230
Claude Code のすすめ
schroneko
67
220k
The #1 spot is gone: here's how to win anyway
tamaranovitovic
2
1k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
34
2.7k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.5k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
250
1.3M
The SEO Collaboration Effect
kristinabergwall1
1
450
Paper Plane (Part 1)
katiecoart
PRO
0
7.6k
Build your cross-platform service in a week with App Engine
jlugia
234
18k
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
0
290
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