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
長期運用プロジェクトでのMySQLからTiDB移行の検証
Search
COLOPL Inc.
April 16, 2024
Technology
2.1k
3
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
長期運用プロジェクトでのMySQLからTiDB移行の検証
COLOPL Inc.
April 16, 2024
More Decks by COLOPL Inc.
See All by COLOPL Inc.
DBについての基礎説明(MySQL編) - コロプラ 2026年度 新卒研修
colopl
0
220
オンラインゲームのシステム全体像 - コロプラ 2026年度 新卒研修
colopl
0
1.3k
Claude Code 再入門 会話の渡し方の4つの道具 - Claude Codeスキル・ハーネス社内勉強会
colopl
0
500
Copilot / Claude Code 両方で使えるスキル・ハーネスの紹介 - Claude Codeスキル・ハーネス社内勉強会
colopl
0
710
実務で動くAIエージェントを作ろう!MCP×Mastraをライブコーディングで実践
colopl
0
550
Cloud Runでコロプラが挑む 生成AI×ゲーム『神魔狩りのツクヨミ』の裏側
colopl
0
2.8k
PHPStan をできる限り高速化してみる
colopl
1
1.5k
コロプラ最新作インフラ構成について
colopl
0
400
Cloud Spanner 導入で実現した快適な開発と運用について
colopl
1
2.5k
Other Decks in Technology
See All in Technology
Autonomous AI Lakehouse - Live AI Hubから始めるセキュアなAIデータ活用 -
oracle4engineer
PRO
2
150
ビジネス部門からPOを迎えての半年間の進歩と課題
zozotech
PRO
0
150
Vue.jsのGitHubから学ぶ意思決定
yut0naga1_fa
1
290
FinOps Agentが生んだ技術負債:コスト自動調査の落とし穴と解消までの道のり
oasis1994liveforever
3
300
CSS2026:OWS研究会・招待講演「世界観を、実装する」
atsush1_sada
2
340
「私が一番顧客に詳しい」を捨てる~ 全員が一次情報に精通する開発チームをつくり、PMが次のボトルネックへ染み出すまで
kaminashi
4
2.5k
プロダクトが成長すると、 プロダクトマネージャーの仕事はどう変わるのか - 「まず作る」から「小さく学び、確かめながら進む」へ
sansantech
PRO
1
370
僕のハーネスを紹介します
watany
6
1.6k
データマネジメント × 法務で作りあげる、 freeeの新しいデータガバナンスへの軌跡
freee
PRO
1
430
Claude Code をローカルとサーバー上で利用した際の Bedrock 利用料をユーザー単位で一本化してみる
ohorig
0
160
freeeにおけるSoftware Factory
freee
PRO
0
530
「Learning Outcome」を書きたくない私が、Learning Outcomeと折り合いをつけるまで
mhlyc
0
240
Featured
See All Featured
AI Search: Where Are We & What Can We Do About It?
aleyda
0
8.1k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
2.1k
A Soul's Torment
seathinner
8
3.8k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
62k
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
74
43k
Building Flexible Design Systems
yeseniaperezcruz
330
41k
Optimising Largest Contentful Paint
csswizardry
37
4k
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
3.2k
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
68
59k
Why Your Marketing Sucks and What You Can Do About It - Sophie Logan
marketingsoph
0
440
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
2
2.1k
Build your cross-platform service in a week with App Engine
jlugia
234
19k
Transcript
長期運用プロジェクトでの MySQL から TiDB 移行の検証 私たちはなぜ NewSQL を使うのか TiDB 選定5社が語る選定理由と活用
LT
曽我 光瑛 • 2018年新卒入社 • 技術基盤本部 インフラストラクチャ部 第1グループ所属 • ゲームインフラの横断的な負荷対策やコスト最適化を担当
2 自己紹介
アジェンダ 1. 長期運用プロジェクトの課題 2. TiDB 導入の背景 3. TiDB 導入の課題 4.
まとめ 3
現状のコロプラの構成について • VM 上に構築したシンプルな Source / Replica 構成の MySQL •
水平 / 垂直分割による負荷分散 4 長期運用プロジェクトの課題
ディスクの削減が困難 • 不要データ削除後のディスクの削減のために Source の切替が必要 構成の縮小 • 水平/垂直分割した DB を一つの
DB にまとめる • インフラだけでなくアプリケーション面の対応も必要 セキュリティ対応 • 分割数が多いため、 MySQL や OS のアップデートに追従するコストが重い • オンラインで実施するためには Source の切替作業が必要 5 長期運用プロジェクトの課題
Source の切替について • 新 Source/Replica の組み合わせを作成しメンテナンス無しで切替 • Source の停止が必要な作業では実施しますが、準備に手間がかかります 6
長期運用プロジェクトの課題 Source Replica Source Replica Application Source Replica Source Replica Application
以下の理由で TiDB を選択 • MySQL 互換 • スケールアウト/スケールインが比較的容易に実施可能 • メンテナンス無しでバージョンアップ可能
• 分割した DB はそのままにエンドポイントを一つに集約可能 • データ圧縮によるディスクの削減 7 TiDB 導入の背景
検証でうまくいった部分 • データ圧縮は想定どおり 1/3 程度まで圧縮 • レイテンシーの悪化は想定の範囲内 8 TiDB 導入の課題
TiKV Region1 データ量による負荷 • 大量のデータにより TiKV 上でリージョンの分割が多く発生 • リージョン間のやり取りのプロセスによりクエリの量以上に TiKV
の負荷が上がる • 適切な Primary Key (PK) やインデックスの追加で軽減可能 9 TiDB 導入の課題 Region3 ID (PK) USER_ID DATA 5 1 data5 6 3 data6 Region2 ID (PK) USER_ID DATA 3 1 data3 4 4 data4 ID (PK) USER_ID DATA 1 1 data1 2 2 data2 SELECT * FROM USER_ID = 1;
得意ではないデータやクエリが存在する • 一部の DB で本番相当の負荷をかけた際に、クエリ量に対して負荷が高い状態となった トランザクション分離レベル • MySQL と同じ REPEATABLE-READ
だが実装が異なる • 本番相当のクエリ量の試験で意図しない動作が発生した ◦ リトライによる多重リクエストのようなクエリで MySQL と異なる結果 ▪ 二重インサート防止のためのアプリケーションのロジックが InnoDB の挙動に依存して いたため、TiDB ではエラーが発生した 10 TiDB 導入の課題 [1] https://docs.pingcap.com/ja/tidb/stable/transaction-isolation-levels#difference-between-tidb-and-mysql-repeatable-read
今回の検証で判明したこと • 小規模なデータ、低頻度のアクセスでは発見できない課題がある ◦ 適切な規模で負荷試験を実施することで分散 DB 特有の問題を見つけることができる • TiDB では適切なデータの配置になるようなインデックスや
Primary Key の設定が必要 • InnoDB エンジンに依存するロジックの改善が必要であること 11 まとめ