$30 off During Our Annual Pro Sale. View Details »

フォルシアにおけるPostgreSQLの活用

 フォルシアにおけるPostgreSQLの活用

「FORCIA Meetup #4 高速検索を支えるPostgreSQLのノウハウ」の資料です

forcia_dev_pr

February 21, 2022
Tweet

More Decks by forcia_dev_pr

Other Decks in Programming

Transcript

  1. フォルシアにおけるPostgreSQLの活用

    高橋 優樹

    2022/02/15 FORCIA Meetup #4


    View Slide

  2. 自己紹介
    ● 高橋 優樹 (Yuki Takahashi)
    ○ 新卒3年目
    ○ 旅行会社向け 商品登録システムの開発
    ○ 技術広報チームリーダー
    ● マイブーム
    ○ サウナ
    ○ スノーボード
    2

    View Slide

  3. フォルシアのメインDBはPostgreSQLです
    3

    View Slide

  4. 4
    フォルシアと検索
    https://www.forcia.com/technology/
    フォルシアは「膨大で複雑なデータ」の高速検索 

    が強みです。

    ・属性による絞り込み検索 

    ・全文検索

    ・ファセットカウント

    ・複雑なデータ間の関係を考慮した検索 

    これらの実現にPostgreSQLは必要不可欠 


    View Slide

  5. 5
    PostgreSQLのここがいいよ3選
    RDBならではの柔軟なテーブル設計

    複雑なデータ間の関係を表現可能


    c言語による関数の拡張が可能

    組み込み関数では実現できない処理を高速に実行可能


    OSSなので無料で利用可能

    クラウドでも利用しやすい


    View Slide

  6. 6
    1. RDBならではの柔軟なテーブル設計
    ホテル

    客室

    プラン

    料金
 在庫

    販売単位

    ×
 365日

    例) 旅行会社が扱う素材のデータ 


    View Slide

  7. 7
    1. RDBならではの柔軟なテーブル設計
    ホテル

    客室

    プラン

    料金
 在庫

    販売単位

    ×
 365日

    現地素材

    飛行機

    新幹線

    その他素材

    例) 旅行会社が扱う素材のデータ 

    ×


    View Slide

  8. 8
    1. RDBならではの柔軟なテーブル設計
    ホテル

    客室

    プラン

    料金
 在庫

    販売単位

    ×
 365日

    現地素材

    飛行機

    新幹線

    その他素材

    契約情報

    販売停止情報

    その他情報

    例) 旅行会社が扱う素材のデータ 

    ×
 ×


    View Slide

  9. 9
    1. RDBならではの柔軟なテーブル設計
    ホテル

    客室

    プラン

    料金
 在庫

    販売単位

    ×
 365日

    現地素材

    飛行機

    新幹線

    その他素材

    契約情報

    販売停止情報

    その他情報

    例) 旅行会社が扱う素材のデータ 

    ×
 ×

    販売可能な条件の判定が非常に複雑
    → 複雑な関係を表現できるRDBが適している

    View Slide

  10. 10
    https://www.postgresql.jp/document/13/html/xfunc.html
    2.c言語による関数の拡張

    View Slide

  11. 11
    2.c言語による関数の拡張
    登録

    C言語で関数を実装 

    soファイルを元に、PostgreSQL側で
    関数を登録
 SQLで実行可能

    コンパイル

    plus_one.so


    View Slide

  12. 12
    c言語関数活用の例
    ● c言語で関数を実装すると、組み込み関数を組み合わせて処理を
    実行するより高速に実行できる場合がある

    ● テーブルをあえて正規化せず、データを配列で持たせる

    ○ 組み込み関数では配列の操作が不十分なので、c言語によっ
    て拡張しています

    ○ 一般的なセオリーからは外れますが、社内に蓄積されたノウ
    ハウやライブラリによって実現しています

    ● 顧客ごとの検索ロジックをc言語関数にまとめることで、処理の見
    通しをよくし、処理を高速化する


    View Slide

  13. 3. OSSなので無料で利用可能
    ● コストが抑えられるため、顧客への導入障壁も低い

    ● クラウドでのスケーラブルな構成にも向いている

    ○ Kubernetesと組み合わせての利用例もあります

    ● 更新も活発


    View Slide

  14. 今後の展望
    14

    View Slide

  15. 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

    View Slide

  16. 続きは残りのLTで!
    16

    View Slide

  17. EOF

    View Slide