こんにちは。インサイトテクノロジーの松尾です!
クラウド移行、ハードウェア更改、システムの作り直しなど、現在動いているデータベースのデータを、他の "新しい" データベースに切り替える "データベース移行" が必要となるシーンはとても多く存在します。そんなデータベース移行(データベースの切り替え)で、しばしば、データレプリケーションツールが使用されますが、そのあたりの仕組みが一見わかりづらいので、改めて記載しておきたいと思います。
はじめに
データベース移行はどのよう行えばよいでしょうか?
基本的には、現在動いているデータベースから何らかの手段でデータを取り出し、そのデータを新しいデータベースに入れてあげることで実現できそう、ということはわかると思います。最もわかりやすいのは、たとえば、CSVファイルなどに出力し、そのCSVファイルを新しい方に入力してあげればよいのです。または、データベース製品に実装されている、バックアップツールでバックアップを取りリストアしてもよいかもしれません。
CSVファイルにしてもバックアップファイルにしても、一度全てのデータを現在のデータベースから取り出し、それを新しいデータベースに入れる、という処理となります。そのため、データ量が非常に多い場合には、現在のデータベースからの全データ取り出し、新しいデータベースへの挿入には、非常に多くの時間(一般的にはサイズが大きければ数時間以上)がかかりそうであることは、容易に想像できると思います。そのため、移行作業に多くの時間がかかることになり、結果的に、システムの停止時間、すなわちビジネスの停止時間が長くなってしまいます。
そこで停止時間を少しでも短くするために活用されているのが (ニア)"リアルタイムデータレプリケーション" ツールです。
なお、データベースの移行にっともないデータベースの種類も変わるようなケースでは、データベースの切り替えに伴うアプリケーション側の改修も必要となりますが、この投稿ではそれは話題とはしていません。
システム停止時間をできるだけ少なくしたい
ところで、停止せずにデータベースを切り替えたい、停止時間をできるだけ少なくしたい、というのはどういった業界でしょうか?
病院で稼働しているシステムやECサイト、その他、24時間365日、業務の根幹を支えるシステムが稼働し続けています。多少のメンテナンス時間は確保できたとしても、それをできるだけ短くし、業務への影響を最低限にしたいというニーズが非常に多く存在しています。
システム停止時間を最小化したデータベース移行
システム停止時間を最小化したデータベース移行と (ニア)"リアルタイムデータレプリケーション"はどういった関係でしょうか?
一見関係ないと思われるかもしれません。が、仕組みは非常にシンプルです。
- (ニア)"リアルタイムデータレプリケーション" ツールを使い、現在のデータベースと新しいデータベースのデータを事前に同期させておく (同じ状態にしておく)。
- 最初に全データを移行します
- 全データ移行後は差分のみを同期します
- システム停止後にデータが完全に同じ状態であることの確認をする。→ 確認できたらデータ移行完了。
データの同期については、一度に全部のデータを持っていくと時間がかかるので、変更があるたびにその分を新しいデータベースに反映させ、両データベースを同じ状態にする、という考え方です。余談ですが、変更があるたびにその分を新しいデータベースに反映させることを CDC (Change Data Capture) と言います。
それぞれのデータベース移行の手法のメリットデメリットを簡単に整理すると以下となります。
DBが備えているツール | CSVファイル経由 | (ニア)"リアルタイムデータレプリケーション" ツール | |
---|---|---|---|
概要 | DBが備えているツール(Data pumpやpgdumpなど)で作業する | CSVファイルに出力して取り込む | Qlik Replicateなどの(ニア)"リアルタイムデータレプリケーション" ツールを使用 |
メリット | ・DB標準の機能で実施できる | ・DB標準の機能で実施できる ・他のDBへ持っていきやすい |
・システム停止時間の最小化 ・他のDBへ持っていきやすい ・GUIなどから操作 |
デメリット | ・データ量に応じて時間がかかる ・他のDBへは持っていくのが難しい ・CLIから操作 |
・データ量に応じて時間がかかる ・他のDBへ持っていくときはデータ型の違いなどを意識する必要がある ・CLIから操作 |
・ツールでサポートしていないものがある場合の対応 ・ツールの費用がかかる |
- 参考:Qlik Replicate詳細 | インサイトテクノロジー
- ※厳密には「リアルタイム」ではないので、ニアリアルタイムと記述
- ※ここでは論理レプリケーションツールを想定
システム停止時間の最小化が必要なら、Qlik Replicate のような (ニア)"リアルタイムデータレプリケーション" ツール の利用は必須と言えるでしょう。いっぽうで、そのような要件がない、すなわち移行作業時のシステム停止時間の制約が緩い場合は、DBが備えているツールの利用で十分とも言えますね。
おわりに
本記事では、システム停止時間を最小化しつつデータベースのデータ移行を実現するにあたり、Qlik Replicate のような (ニア)"リアルタイムデータレプリケーション" ツール の利用が必須となることを紹介しました。
クリティカルなシステムのデータベース移行の方式を検討中の方、ぜひ、レプリケーションツールの活用を検討ください。