SlideShare a Scribd company logo
1 of 33
Download to read offline
Rails複数DBシステム
MySQLからPostgreSQL
移⾏行行物語
シナジーマーケティング株式会社
三苫  亮亮
2015/04/17
Riding  Rails勉強会(Railsを乗りこなせ)  発表資料料
⾃自⼰己紹介
•  三苫  亮亮(みとま  りょう)
https://github.com/mitoma
•  今までやってきたこと
–  マルチテナントシステム
–  複数データベースシステム
–  スキーマ不不定データ  on  RDBMS
⽬目次
•  本⽇日お話しすること
•  Rails複数DBシステム
•  データベース移⾏行行
•  無停⽌止移⾏行行の流流れ
•  まとめ
本⽇日お話しすること
•  Railsで構築されたマルチテナントシステムを
MySQLからPostgreSQLへ
無停⽌止で移⾏行行するというお話
•  ただし
•  データベースは複数あり
スキーマ定義はそれぞれ微妙に異異なり
移⾏行行期間は数か⽉月に及ぶ
おそらく
ここにいる皆様が
–  「今すぐ使えるお役⽴立立ち情報だ!」
–  「ヘーシャもまさにいま、
  その問題に困っていたのだよ!」
と、思うような発表内容ではないかもしれません。
できれば
Railsを実務でバリバリ使っている皆様が
いつか似たような困難に直⾯面したときに
–  「そういえば類似の事例例がある」
–  「この部分の考え⽅方は応⽤用できる」
と、考える引き出しを増やすことに繋がれば幸いです。
マルチテナントって?
•  ⼀一つのシステム内で複数のテナントの
データを同居させる⽅方式のシステム
–  実現⽅方法はデータや処理理の
分離離レベルによってさまざま
•  アプリケーションの実装で分離離(Salesforce)
•  データストアの機能で分離離
•  アプリケーション・ミドルウェアのプロセスで分離離
•  インスタンスで分離離(Amazon  Web  Service)
⽬目次
•  本⽇日お話しすること
•  Rails複数DBシステム
•  データベース移⾏行行
•  無停⽌止移⾏行行の流流れ
•  まとめ
Rails複数DBシステム
•  システム概要
–  管理理DBが1つ
•  メタ情報
•  DB接続先
–  テナントDBが多数
•  テナント毎に
データベースが独⽴立立
•  スキーマはテナント毎
で異異なる
移⾏行行する
•  無停⽌止でMySQLからPostgreSQLに
数か⽉月かけて移⾏行行していく
どうやって?
むずかしい・・・
⽬目次
•  本⽇日お話しすること
•  Rails複数DBシステム
•  データベース移⾏行行
•  無停⽌止移⾏行行の流流れ
•  まとめ
検討したこと
•  データの移⾏行行⽅方法
– スキーマの定義情報、データ
•  移⾏行行データの検証
•  MySQL⇔PostgreSQL互換性
•  移⾏行行期間中のシステムの動き
データの移⾏行行⽅方法1
•  論論理理ダンプ⇒変換⇒投⼊入
–  出⼒力力されたDDL,  DMLを正規表現で
PostgreSQLで投⼊入可能なように変換
データの移⾏行行⽅方法1
•  論論理理ダンプ⇒変換⇒投⼊入
–  出⼒力力されたDDL,  DMLを正規表現で
PostgreSQLで投⼊入可能なように変換
荒業っぽいが意外と問題ない!
荒業そのものという気もする
データの移⾏行行⽅方法2
型の変換
変換後はPgSanityを使ってクエリが構⽂文レベルで
壊れていないことをチェック
MySQL PostgreSQL 注意点
tinyint(1) boolean 数値→true/false
varchar citext 検索索時の⼤大⽂文字⼩小⽂文字の挙動
auto_̲increment serial シーケンスの初期値をsetvalすること。
(現在値はDDLに吐き出される)
blob bytea バイナリも正規表現で置換可能!
line.gsub!(/0x([0-‐‑‒9,A-‐‑‒F]+)/,  
                              "decode('1','hex')")
検討したこと
•  データの移⾏行行⽅方法
– スキーマの定義情報、データ
•  移⾏行行データの検証
•  MySQL⇔PostgreSQL互換性
•  移⾏行行期間中のシステムの動き
データの検証⽅方法1
•  移⾏行行したデータの検証は?
–  レコード件数の⽐比較?
–  データの内容のチェック?
•  MySQLとPostgreSQLが型が違うのに
どうすれば同⼀一といえる?
–  はたまた⽬目grep?
•  そんな⾺馬⿅鹿鹿な
データの検証⽅方法2
•  ActiveRecordとMD5でやる
–  全テーブルに対応するモデルを動的⽣生成し、
各レコードのattributeを⾜足し合わせてMD5を計算する
–  その⼆二つのリストをdiffを取ることで少なくとも
ActiveRecordのレイヤでは同⼀一であることを保証する
検討したこと
•  データの移⾏行行⽅方法
– スキーマの定義情報、データ
•  移⾏行行データの検証
•  MySQL⇔PostgreSQL互換性
•  移⾏行行期間中のシステムの動き
挙動の違いの埋め⽅方1
•  MySQLとPostgreSQLで
挙動の違うクエリをどうやって埋めるか
–  case  insensitiveな⽂文字列列検索索
–  キャストの挙動の違い
–  order  by時のnullの扱い
–  曖昧なgroup  by
–  トランザクション分離離レベルの違い
–  Etc…
挙動の違いの埋め⽅方2
•  PostgreSQLの豊富な機能を使う
–  演算⼦子の独⾃自定義
–  citextなどの独⾃自型
•  検討のけっか、どうしても回避できないところは
クエリ書き換えで対応するしかない
–  泥泥臭くてもそれしか答えがないときは
受け⼊入れるしかない
–  検討して⽅方法がないなら仕⽅方がない
検討したこと
•  データの移⾏行行⽅方法
– スキーマの定義情報、データ
•  移⾏行行データの検証
•  MySQL⇔PostgreSQL互換性
•  移⾏行行期間中のシステムの動き
移⾏行行期間中
•  システムはMySQLとPostgreSQLを両⽅方参照し
ながら稼働する必要がある
アダプタタイプを⾒見見て
接続先で発⾏行行すべきクエリを決定する。
ただのif⽂文かつActiveRecordなら
コネクションのアダプタタイプを
取れるので簡単に実現可能
⽬目次
•  本⽇日お話しすること
•  Rails複数DBシステム
•  データベース移⾏行行
•  無停⽌止移⾏行行の流流れ
•  まとめ
無停⽌止移⾏行行の流流れ1
①まずはPostgreSQL側に、管理理DBとテナント⽤用のDBを⽤用意する
無停⽌止移⾏行行の流流れ2
②管理理DBの更更新を停⽌止し、移⾏行行する
③移⾏行行された管理理DBを参照する両対応アプリをリリースする
無停⽌止移⾏行行の流流れ3
④テナントを⼀一件⼀一件、データを移⾏行行していく
  (移⾏行行時間中は対象テナントはシステム停⽌止、他は稼働し続ける)
無停⽌止移⾏行行の流流れ4
⑤最後までやりきる
簡単でしたか?
•  わずか5ステップで無停⽌止移⾏行行が完了了!
•  簡単に⾒見見えるのは、簡単にかいつまんだから
•  問題を整理理して課題を洗い出してそのそれぞれに
ついてどう対処するか決定していく段取りが必要
–  準備⼋八割・⾏行行動⼆二割
⽬目次
•  本⽇日お話しすること
•  Rails複数DBシステム
•  データベース移⾏行行
•  無停⽌止移⾏行行の流流れ
•  まとめ
まとめ
•  すぐに役⽴立立つ事例例ではないが考え⽅方などは
役⽴立立つと思うので参考になれば
•  RDBMS間でデータ移⾏行行の時は、
論論理理ダンプをコンバートするとよい
•  データの検証は、OR  Mapperなど上位のレイヤで
同⼀一性を確認できると楽
•  解決策を探ったうえでシンプルな解決策が無い場合は
腹をくくって泥泥臭くやる
•  無停⽌止移⾏行行は、準備⼋八割・⾏行行動⼆二割
以上です
•  勉強会で出た質問
–  規模は?
→ざっくりギガです。1~∼1000のオーダーはご想像にお任せします。
–  テナントの停⽌止が⼀一晩で終わらないとかなかった?時間の⾒見見積もりは?
→事前にデータの規模ベースでベンチマークを⾏行行い、予測を⽴立立てた
→移⾏行行が⽴立立て込んでる⽇日は並列列ダンプ&並列列リストアで⾼高速化を図った
–  無停⽌止と⾔言っているが、移⾏行行中は対象テナントは停⽌止しているのでは?
→その通りです。システム全体として無停⽌止という話なので、ちょっと誤解しやすい説明でした。
•  回答を拒否した質問
–  移⾏行行を決断するに⾄至った理理由は?
–  寿司とビール、区別つきますか?
–  いつの話ですか?
•  本⽇日の内容は以下のブログでもまとまっています
–  http://www.techscore.com/blog/2014/12/05/rails_̲db_̲migration/

More Related Content

Similar to #riding_rails Rails複数DBシステム MySQLからPostgreSQL移行物語

DBワークロードのAWS化とデータベースサービス関連最新情報
DBワークロードのAWS化とデータベースサービス関連最新情報DBワークロードのAWS化とデータベースサービス関連最新情報
DBワークロードのAWS化とデータベースサービス関連最新情報Amazon Web Services Japan
 
マイクロサービス運用の所感 #m3dev
マイクロサービス運用の所感 #m3devマイクロサービス運用の所感 #m3dev
マイクロサービス運用の所感 #m3devKazuhiro Sera
 
【IVS CTO Night & Day】AWSにおけるビッグデータ活用
【IVS CTO Night & Day】AWSにおけるビッグデータ活用【IVS CTO Night & Day】AWSにおけるビッグデータ活用
【IVS CTO Night & Day】AWSにおけるビッグデータ活用Amazon Web Services Japan
 
[Aurora事例祭り]AWS Database Migration Service と Schema Conversion Tool の使いドコロ
[Aurora事例祭り]AWS Database Migration Service と Schema Conversion Tool の使いドコロ[Aurora事例祭り]AWS Database Migration Service と Schema Conversion Tool の使いドコロ
[Aurora事例祭り]AWS Database Migration Service と Schema Conversion Tool の使いドコロAmazon Web Services Japan
 
RailsとCで広告システムを作って起業した話
RailsとCで広告システムを作って起業した話RailsとCで広告システムを作って起業した話
RailsとCで広告システムを作って起業した話Daisuke Yamazaki
 
成長していくサービスとAWS
成長していくサービスとAWS成長していくサービスとAWS
成長していくサービスとAWSMitsuharu Hamba
 
初心者向け負荷軽減のはなし
初心者向け負荷軽減のはなし初心者向け負荷軽減のはなし
初心者向け負荷軽減のはなしOonishi Takaaki
 
オンプレミスRDBMSをAWSへ移行する手法
オンプレミスRDBMSをAWSへ移行する手法オンプレミスRDBMSをAWSへ移行する手法
オンプレミスRDBMSをAWSへ移行する手法Amazon Web Services Japan
 
Cassandraとh baseの比較して入門するno sql
Cassandraとh baseの比較して入門するno sqlCassandraとh baseの比較して入門するno sql
Cassandraとh baseの比較して入門するno sqlYutuki r
 
ServiceStackの紹介
ServiceStackの紹介ServiceStackの紹介
ServiceStackの紹介wilfrem
 
スマートフォン×Cassandraによるハイパフォーマンス基盤の構築事例
スマートフォン×Cassandraによるハイパフォーマンス基盤の構築事例スマートフォン×Cassandraによるハイパフォーマンス基盤の構築事例
スマートフォン×Cassandraによるハイパフォーマンス基盤の構築事例terurou
 
MySQL最新動向と便利ツールMySQL Workbench
MySQL最新動向と便利ツールMySQL WorkbenchMySQL最新動向と便利ツールMySQL Workbench
MySQL最新動向と便利ツールMySQL Workbenchyoyamasaki
 
MTDDC Meetup HOKKAIDO 2013 (サーバーワークス発表資料)
MTDDC Meetup HOKKAIDO 2013 (サーバーワークス発表資料)MTDDC Meetup HOKKAIDO 2013 (サーバーワークス発表資料)
MTDDC Meetup HOKKAIDO 2013 (サーバーワークス発表資料)Serverworks Co.,Ltd.
 
Architecting on Alibaba Cloud - 超基礎編 -
Architecting on Alibaba Cloud - 超基礎編 -Architecting on Alibaba Cloud - 超基礎編 -
Architecting on Alibaba Cloud - 超基礎編 -真吾 吉田
 
PHPで大規模ブラウザゲームを開発してわかったこと
PHPで大規模ブラウザゲームを開発してわかったことPHPで大規模ブラウザゲームを開発してわかったこと
PHPで大規模ブラウザゲームを開発してわかったことKentaro Matsui
 
kintone のレコード絞り込み置き換え事例の紹介
kintone のレコード絞り込み置き換え事例の紹介kintone のレコード絞り込み置き換え事例の紹介
kintone のレコード絞り込み置き換え事例の紹介Ryo Mitoma
 

Similar to #riding_rails Rails複数DBシステム MySQLからPostgreSQL移行物語 (20)

DBワークロードのAWS化とデータベースサービス関連最新情報
DBワークロードのAWS化とデータベースサービス関連最新情報DBワークロードのAWS化とデータベースサービス関連最新情報
DBワークロードのAWS化とデータベースサービス関連最新情報
 
マイクロサービス運用の所感 #m3dev
マイクロサービス運用の所感 #m3devマイクロサービス運用の所感 #m3dev
マイクロサービス運用の所感 #m3dev
 
商用RDBMSのAWSへの移行
商用RDBMSのAWSへの移行商用RDBMSのAWSへの移行
商用RDBMSのAWSへの移行
 
【IVS CTO Night & Day】AWSにおけるビッグデータ活用
【IVS CTO Night & Day】AWSにおけるビッグデータ活用【IVS CTO Night & Day】AWSにおけるビッグデータ活用
【IVS CTO Night & Day】AWSにおけるビッグデータ活用
 
[Aurora事例祭り]AWS Database Migration Service と Schema Conversion Tool の使いドコロ
[Aurora事例祭り]AWS Database Migration Service と Schema Conversion Tool の使いドコロ[Aurora事例祭り]AWS Database Migration Service と Schema Conversion Tool の使いドコロ
[Aurora事例祭り]AWS Database Migration Service と Schema Conversion Tool の使いドコロ
 
RailsとCで広告システムを作って起業した話
RailsとCで広告システムを作って起業した話RailsとCで広告システムを作って起業した話
RailsとCで広告システムを作って起業した話
 
成長していくサービスとAWS
成長していくサービスとAWS成長していくサービスとAWS
成長していくサービスとAWS
 
初心者向け負荷軽減のはなし
初心者向け負荷軽減のはなし初心者向け負荷軽減のはなし
初心者向け負荷軽減のはなし
 
オンプレミスRDBMSをAWSへ移行する手法
オンプレミスRDBMSをAWSへ移行する手法オンプレミスRDBMSをAWSへ移行する手法
オンプレミスRDBMSをAWSへ移行する手法
 
Cassandraとh baseの比較して入門するno sql
Cassandraとh baseの比較して入門するno sqlCassandraとh baseの比較して入門するno sql
Cassandraとh baseの比較して入門するno sql
 
ServiceStackの紹介
ServiceStackの紹介ServiceStackの紹介
ServiceStackの紹介
 
スマートフォン×Cassandraによるハイパフォーマンス基盤の構築事例
スマートフォン×Cassandraによるハイパフォーマンス基盤の構築事例スマートフォン×Cassandraによるハイパフォーマンス基盤の構築事例
スマートフォン×Cassandraによるハイパフォーマンス基盤の構築事例
 
MySQL最新動向と便利ツールMySQL Workbench
MySQL最新動向と便利ツールMySQL WorkbenchMySQL最新動向と便利ツールMySQL Workbench
MySQL最新動向と便利ツールMySQL Workbench
 
DevOps with Database on AWS
DevOps with Database on AWSDevOps with Database on AWS
DevOps with Database on AWS
 
About NoSQL
About NoSQLAbout NoSQL
About NoSQL
 
MTDDC Meetup HOKKAIDO 2013 (サーバーワークス発表資料)
MTDDC Meetup HOKKAIDO 2013 (サーバーワークス発表資料)MTDDC Meetup HOKKAIDO 2013 (サーバーワークス発表資料)
MTDDC Meetup HOKKAIDO 2013 (サーバーワークス発表資料)
 
Architecting on Alibaba Cloud - 超基礎編 -
Architecting on Alibaba Cloud - 超基礎編 -Architecting on Alibaba Cloud - 超基礎編 -
Architecting on Alibaba Cloud - 超基礎編 -
 
PHPで大規模ブラウザゲームを開発してわかったこと
PHPで大規模ブラウザゲームを開発してわかったことPHPで大規模ブラウザゲームを開発してわかったこと
PHPで大規模ブラウザゲームを開発してわかったこと
 
DynamoDBとはとは
DynamoDBとはとはDynamoDBとはとは
DynamoDBとはとは
 
kintone のレコード絞り込み置き換え事例の紹介
kintone のレコード絞り込み置き換え事例の紹介kintone のレコード絞り込み置き換え事例の紹介
kintone のレコード絞り込み置き換え事例の紹介
 

Recently uploaded

論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 

Recently uploaded (9)

論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 

#riding_rails Rails複数DBシステム MySQLからPostgreSQL移行物語