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
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
160
新しいおもちゃを見つけたい私がやっている情報収集
forcia_dev_pr
2
420
「Pythonの環境構築について」と記事作成で意識したこと
forcia_dev_pr
1
140
Neovim で VS Code みたいにコーディングする
forcia_dev_pr
1
150
なぜ・どうやって・何を書く? 〜技術記事を書く習慣の作り方〜
forcia_dev_pr
1
160
第8回ゆるふわオンサイト 解説スライド
forcia_dev_pr
0
100
第7回ゆるふわオンサイト解説
forcia_dev_pr
0
240
第6回ゆるふわオンサイト解説
forcia_dev_pr
0
240
よくわかるFORCIAのエンジニア旅行SaaSプロダクト開発編
forcia_dev_pr
0
790
Other Decks in Programming
See All in Programming
プロパティベーステストによるUIテスト: LLMによるプロパティ定義生成でエッジケースを捉える
tetta_pdnt
0
310
Testing Trophyは叫ばない
toms74209200
0
860
RDoc meets YARD
okuramasafumi
4
170
速いWebフレームワークを作る
yusukebe
5
1.7k
Azure SRE Agentで運用は楽になるのか?
kkamegawa
0
2.1k
Performance for Conversion! 分散トレーシングでボトルネックを 特定せよ
inetand
0
140
Tool Catalog Agent for Bedrock AgentCore Gateway
licux
6
2.4k
go test -json そして testing.T.Attr / Kyoto.go #63
utgwkk
3
290
「待たせ上手」なスケルトンスクリーン、 そのUXの裏側
teamlab
PRO
0
500
そのAPI、誰のため? Androidライブラリ設計における利用者目線の実践テクニック
mkeeda
2
280
「手軽で便利」に潜む罠。 Popover API を WCAG 2.2の視点で安全に使うには
taitotnk
0
840
奥深くて厄介な「改行」と仲良くなる20分
oguemon
1
520
Featured
See All Featured
What’s in a name? Adding method to the madness
productmarketing
PRO
23
3.7k
Scaling GitHub
holman
463
140k
It's Worth the Effort
3n
187
28k
Unsuck your backbone
ammeep
671
58k
KATA
mclloyd
32
14k
Build your cross-platform service in a week with App Engine
jlugia
231
18k
Why Our Code Smells
bkeepers
PRO
339
57k
GraphQLとの向き合い方2022年版
quramy
49
14k
Documentation Writing (for coders)
carmenintech
74
5k
Automating Front-end Workflow
addyosmani
1370
200k
Agile that works and the tools we love
rasmusluckow
330
21k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
139
34k
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