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
ProductionでRails6マルチDB対応を小さく始める
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Hirotaka Miyagi
January 23, 2020
Technology
1.8k
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
ProductionでRails6マルチDB対応を小さく始める
平成.rb #11で話したスライドです。
Hirotaka Miyagi
January 23, 2020
More Decks by Hirotaka Miyagi
See All by Hirotaka Miyagi
チームの性質によって変わる ADR との向き合い方と、生成 AI 時代のこれから / How to deal with ADR depends on the characteristics of the team
mh4gf
5
2.2k
Playwright でテストを書いててよかった!と思えた事例紹介
mh4gf
0
350
GraphQL 成熟度モデルの紹介と、プロダクトに当てはめた事例 / GraphQL maturity model
mh4gf
8
2.2k
to B プロダクトで Vite + React Router を採用して半年後の感想 / Impressions after 6 months of using Vite + React Router
mh4gf
16
7k
Playwright で一番小さく始める VRT と、次のステップの選択肢
mh4gf
14
6.1k
学習しながらアーキテクチャを進化させていくためのモノレポ
mh4gf
3
1.3k
pnpm workspace実践ノウハウ
mh4gf
14
9.4k
sassc-railsを利用している我々は、Sassの@importの非推奨化をどのように乗り越えていくか
mh4gf
4
3k
平成Ruby会議 株式会社タイミースポンサーセッション
mh4gf
0
670
Other Decks in Technology
See All in Technology
データエンジニアの困りごとをDevinと一緒に解消する
10xinc
2
830
Bet AI Day 2026丨Agentは、「金融」という巨大産業の何を変えられるのか
layerx
PRO
0
1k
2026-09-04 SRE Tech Talk #15 怠惰なTerraform / Lazy Terraform
masasuzu
0
200
AIとペアプロを始める。人とのペアプロをやめる。ペアプロの良さを改めて知る。もっと好きになった。 / Rediscovering Pair Programming
honyanya
1
250
Microsoft 365 Copilot chat -tekoälypalvelun tietosuojaongelmat
hponka
0
420
その指示、Bobにしっかり伝わってる?初心者でも即実践できる プロンプト/コンテキスト設計のコツ
muehara
1
160
20260903 Tokyo Jazug Night #62 | Azure エンジニアよ、 その環境は本当にセキュアか?
olivia_0707
1
620
Autonomous AI Databaseサービス・アップデート(FY27)/ adb-service-update-jp-fy27
oracle4engineer
PRO
0
120
Nav2、Nav3 ... はたまた自作?〜 作って理解する Nav3 の設計意図 〜 / Nav2, Nav3 ... or Build Your Own? — Understanding Nav3's design intent by building it from scratch
yanzm
0
250
AIエージェントの開発・提供におけるセキュリティリスクの論点と対策
flatt_security
1
580
Benchmarking Vector Databases: pgvector vs. LanceDB
tsho
0
140
プロダクトエンジニアに必要な「いい感じ」に作る能力 〜たくさん作れる時代に、どこまで作るかの決め方〜
jnishime_dresscode
2
1.4k
Featured
See All Featured
The Invisible Side of Design
smashingmag
301
52k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
10
1.3k
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
310
Building Flexible Design Systems
yeseniaperezcruz
330
41k
Amusing Abliteration
ianozsvald
1
290
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
290
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
270
VelocityConf: Rendering Performance Case Studies
addyosmani
331
25k
AI: The stuff that nobody shows you
jnunemaker
PRO
9
970
YesSQL, Process and Tooling at Scale
rocio
174
15k
Digital Ethics as a Driver of Design Innovation
axbom
PRO
1
410
Reflections from 52 weeks, 52 projects
jeffersonlam
356
21k
Transcript
ProductionでRails6 Multi DB対応を小さく始める 株式会社タイミー 宮城広隆
自己紹介 宮城 広隆 Ruby/Rails歴は2年 @MH4GF
平成Ruby会議のスポンサートークでマルチDB対応の 話を軽くしたところ、懇親会でどのように運用しているの かと聞かれることが多かったので 今回はその話をします
話すこと - Multi DBの概要 - 導入の流れ - 導入後の結果
話すこと - Multi DBの概要 - 導入の流れ - 導入後の結果
• 複数の「primary」データベースと、それぞれに対応する1つの 「replica」 • モデルでのコネクション自動切り替え • HTTP verbや直近の書き込みに応じたprimaryとreplicaの 自動スワップ •
マルチプルデータベースの作成、削除、マイグレーション、やり とりを行うRailsタスク Multi DBの概要
• 複数の「primary」データベースと、それぞれに対応する1つの 「replica」 • モデルでのコネクション自動切り替え • HTTP verbや直近の書き込みに応じたprimaryとreplicaの 自動スワップ •
マルチプルデータベースの作成、削除、マイグレーション、やり とりを行うRailsタスク Multi DBの概要
話すこと - Multi DBの概要 - 導入の流れ - 導入後の結果
• リードレプリカの導入 • 特定のGETエンドポイントのみリードレプリカに接続 • DatabaseSelectorは使わない 今回やったこと
• Ruby2.6.1 • Rails6.0.2.1 • Amazon Aurora MySQL 環境
なぜマルチDBが必要だったのか
なぜマルチDBが必要だったのか • 一番はCMによる負荷増大の保険のため • 最悪の場合のフェイルオーバーの選択肢を作るため
実戦投入 RDS RDSで「リーダーの追加」を選択し、リードレプリカのDBインス タンスを追加
実戦投入 RDS クラスターのリード用エンドポイントが作られるので、こちらを 控えておく
実戦投入 database.yml
実戦投入 モデル 各モデルで継承している抽象クラス(デフォルトのままでは ApplicationRecord)で、databaseとroleを設定
実戦投入 コントローラー リードレプリカを読みたい箇所でconntected_toを呼ぶ
実戦投入 コントローラー 以上!!!!
実戦投入 100行以下の修正で実装完了
実戦投入 コントローラー around_actionで呼ぶこともできます
DatabaseSelectorを使いたい場合 Railsガイドから引用 https://railsguides.jp/active_record_multiple_databases.html
できたこと • デフォルトでは変わらずprimaryのDBに接続し、叩かれる頻度 の高いSELECTクエリだけ明示的にreplicaのDBに接続でき るようになった • クエリが詰まることもなくCMを乗り越えられた ◦ 保険として用意していた形だが、何も問題が起きないことが 正義
• 副次的な効果として、フェイルオーバーができるようになり再起 動が発生してもダウンタイムの短縮が期待できるようになった
まだできていないこと/次にやる必要があること • 開発/テスト環境でのリードレプリカ • DBユーザーの適切な権限付与 • DatabaseSelectorを使うかどうかの意思決定 • フェイルオーバー時のコネクションプールをどうする