Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
稼働中サービスの大規模データをどう移すか。仕訳帳検索のOpenSearch移行
Search
freee
PRO
October 20, 2026
Technology
10
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
稼働中サービスの大規模データをどう移すか。仕訳帳検索のOpenSearch移行
freee 技術の日 2026のセッション資料です。
freee
PRO
October 20, 2026
More Decks by freee
See All by freee
freeeに点在する案件・プロジェクトを統合するための案件マスタ開発
freee
PRO
0
16
freeeにおけるSoftware Factory
freee
PRO
0
38
freeeにおける AI を用いた ブラウザ動作確認の自動化の取り組み
freee
PRO
0
23
AIから最も使われやすいfreeeへ
freee
PRO
0
12
認知負荷との戦い〜 freee AIアシスタントの誕生からハーネス改善まで 〜
freee
PRO
0
15
脱SaaS脳 キャリア25年目の挑戦
freee
PRO
0
14
攻めと守りを両立するデータ基盤 〜中央集権型からデータメッシュへの道のり〜
freee
PRO
0
7
セキュリティチームのAIエージェントを チーム内の誰でも改善できるようにするまで
freee
PRO
0
11
AI Readyな安定性の高いデータ基盤を目指し、120個のデータコントラクトを結んだ話
freee
PRO
0
18
Other Decks in Technology
See All in Technology
遠藤な_めぐろLT #38 「社内のAI活用推進」@麻布台_20261009
endonanana
0
130
NDIでApple Vision Proにリアルタイム映像送信
jyouryuusui
0
120
JAWSUG TOHOKU 青森支部 「LoGoチャット」のAWS移行で 乗り越えたこと
taketakekaho
0
340
Local CI × GitHub Actions
gogutan
2
220
コンテナ運用におけるネットワーク・コンテナコストの削減方法/How to Reduce Network and Container Costs in Container Operations
masakiokuda
1
250
AIにシークレットを見せない、WSL2で安全な開発環境
yazm
0
310
Conditional PED-ANOVA: Hyperparameter Importance in Hierarchical & Dynamic Search Spaces
pfn
PRO
0
140
Benchmarking Disaggregated Serving on vLLM + Dynamo with a Real Coding-Agent Workload
nttcom
1
190
SAENM ~Jupyterで残すPoCの試行錯誤、未来の自分と仲間を助ける記録!~
terapyon
0
110
触りたくないデータに、どう触るか AI時代のRBACアクセスガバナンス
ivry_presentationmaterials
0
270
Post AI時代のリファクタリング実践記 / Refactoring in the post AI era
kaminashi
1
260
JAWS-UGグッズ職人仕事の流儀
kentapapa
0
120
Featured
See All Featured
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
254
22k
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
1
340
Reality Check: Gamification 10 Years Later
codingconduct
0
2.3k
Site-Speed That Sticks
csswizardry
13
1.6k
The Cult of Friendly URLs
andyhume
79
7k
The Pragmatic Product Professional
lauravandoore
37
7.5k
エンジニアに許された特別な時間の終わり
watany
109
250k
Utilizing Notion as your number one productivity tool
mfonobong
4
620
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
10
1.4k
Fantastic passwords and where to find them - at NoRuKo
philnash
53
4k
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
2
730
How to Align SEO within the Product Triangle To Get Buy-In & Support - #RIMC
aleyda
2
1.8k
Transcript
None
稼働中サービスの⼤規模データをどう移すか。 仕訳帳検索のOpenSearch移⾏ 萩本 康⼼(hagi) 2026年10⽉3⽇
会計申告開発本部 業種特化部 エンジニア 萩本 康心(hagi) 2025年4月に新卒でfreeeに入社。 freeeホームページ の立ち上げ後、 現在までfreee会計の開発に従事。
仕訳帳の検索が 速くなりました
仕訳帳の検索が速くなりました 仕訳帳検索のレイテンシ(p99) 20s 約12秒 15s 10s 約4秒 5s RDB での検索を
OpenSearch に移して、p99 が約12秒 → 約4秒
ただ、今⽇の主役は 検索ではありません 主役は、動いているサービスの数⼗億件をどう移したか
今⽇のゴール ⽌められないサービスで、数⼗億件をどう移すかを理解する
01 仕訳帳とは?
すべての仕訳が記録される、最も件数の多い帳簿 仕訳帳の画⾯(スクリーンショット) 会計データは消えない。過去の仕訳は残り続ける
数⼗億件、100万を超える事業所 数⼗億件 100万超 1⽇20万超 仕訳 事業所 仕訳帳の検索 件数は増え続ける
02 なぜ移⾏したのか?
テキスト検索が重く、 データの多い事業所ほど刺さる 部分⼀致検索はインデックスが効かない。 データの多い事業所ほど線形に悪化する 検索結果が返るまで、p99 で 12秒
そして、条件を⾜せなかった 承認ステータスは別のマイクロサービスが持つ。JOIN で絞り込めない 詳細な「承認状態で検索したい」に、実装で応えられない
03 どうやって同期しているか?
仕訳は、会計DBに書かれる 会計API / Web 登録 会計DB
Outbox パターン ― 同じトランザクションでイベント⾏も書く 会計API / Web 登録 会計DB +
outbox テーブル 業務処理と同じコミットに乗せる 業務データとイベントが同⼀トランザクション。at-least-once を保証できる
別プロセスが拾って、OpenSearch に⼊れる 会計API / Web 登録 会計DB + outbox テーブル
読む 登録 Indexer 業務処理と同じコミットに乗せる outbox テーブルをポーリングし、Bulk API で投⼊する Open Search
ドキュメント1件に、3つの社内サービスを叩いている 会計API / Web 登録 会計DB + outbox テーブル 読む
登録 Indexer Open Search ファイル基盤 証憑情報 コメント基盤 コメント情報 業務処理と同じコミットに乗せる 承認基盤 申請状態 1ドキュメント = 3リモートコール
04 何が難しかったのか?
過去の分が、空のまま 同期は動き出した。しかし OpenSearch には過去の仕訳が⼊っていない 数⼗億件のバックフィル(初回同期)が要る
⻑くても2週間だと思っていました 根拠は、数年前に社内でやった取引データの移⾏ 仕訳は freee の中でもトップクラスのデータ量。 この規模を移した経験は、社内にもなかった
1 Pod で数時間流して、計算し直した goroutine の並列数を上げながら実測 このペースなら、1年
05 どうやって流し切ったか?
goroutine を増やせば済むと思っていた Pod 1つの Pod の中で、ドキュメント⽣成を goroutine の worker pool
で並列化
ある並列数から、速くならなくなった 並列数を上げても、スループットが伸びない
待っていたのは、CPU ではなくネットワークだった 承認基盤 ドキュメント ⽣成 ファイル基盤 応答を待っている コメント基盤 1件ごとに、依存サービスからの応答を待つ。 待っている間、プロセスは何もしていない
Pod を増やすしかなかった Pod Pod Pod 送信元を増やせば、並⾏して待てる ただし増やしすぎると、今度は相⼿がリクエスト過多で倒れる Pod
そして、Pod を 1 → 2 → 4 と上げていった Pod 1台
2台 負荷を⾒ながら、段階的に 4台
⾒ていたのは、4つのDBと OpenSearch Pod 1台 2台 4台 負荷を⾒ながら、段階的に ⾒ていたもの 会計DB コメント基盤
承認基盤 認証基盤 CPU‧DBロード‧接続数∕JVMメモリ圧‧エラー率‧IOPS OpenSearch
落ちる前提で作り、 ⽌める⼿段を先に⽤意する 未処理の事業所だけを取り出すカーソル⽅式。処理は冪等 キルスイッチを⽤意し外から⽌められるようにした ループが定期的にフラグを⾒て、安全な位置で⽌まる
1年規模の⾒積もりが、 1ヶ⽉半で終わった
06 結果
仕訳帳の検索が速くなりました 仕訳帳検索のレイテンシ(p99) 20s 15s 10s 約12秒 約4秒 5s RDB での検索を
OpenSearch に移して、p99 が約12秒 → 約4秒
そして、できなかった検索ができるようになった 仕訳帳の検索フォーム(スクリーンショット) コメント検索‧詳細な承認状態での検索が実装できるようになった
07 まとめ
この事例から学べること 1 移⾏のボトルネックは、⾃分のDBではなく他⼈のサービスにある 計画を⽴てる前に、1件あたり誰に何回問い合わせるかを数える 2 並列度は、叩く先の実測で決める ⾃分のDBだけでなく、叩きに⾏く先の負荷を並べて⾒る 3 移⾏バッチは、必ず途中で死ぬ前提で作る ⼀度で流し切る設計にしない。⽌めるスイッチを先に作る
None