DBMotoの各レプリケーションをグループ化する際の利点とは?


DBMotoはテーブル単位でレプリケーションジョブを作成します。レプリケーションジョブ単位で下記のことが可能となります。

●レプリケーションジョブ単位で行えること

・レプリケーションモード(片方向か、双方向か、全件か、差分か)
・差分レプリケーションの実行間隔(既定は60秒)
・スケジュール(定期全件リフレッシュ実行、差分ミラーリングの除外設定)


※グループ化を使用していない場合の設定

また重要なポイントは、レプリケーションジョブ単位でDBに対するクライアントアクセスセッションとなることです。つまりテーブル数が1,000ある場合には、レプリケーションジョブも1,000個となるため、DBへのクライアント接続数も最大1,000となります。これは言いかえると、DBへのセッション数が増大してDBへの負荷がかかる恐れがあることを意味します。

では、これらのレプリケーションジョブをグループ化としてまとめた場合にはどのようになるでしょうか?

●グループ化した際の特徴

・レプリケーションジョブ単位で行えた設定はグループで共通設定となる
・DBへのクライアントアクセスセッションもグループ単位となる


※グループ化を使用した場合の設定

グループ化することによって、DBへの接続セッション数を減らすことが可能となります。例えば、レプリケーションジョブが100個を1グループにまとめた場合にはDBへの接続数は1です。レプリケーションジョブが1,000個で1グループ100ジョブ×10グループの場合は、DBへの接続数は10です。このように、DBへの接続数を大幅に減らすことが可能となるため、テーブル数が多い場合にはグループ化の設定は事実上必須となります。

●グループ化した際のレプリケーションの実行順位は?

グループ化によってセッション数が1となるため、各レプリケーションの実行は下記の順で行われます。

・全件リフレッシュの場合⇒グループ化した際に設定する優先順位で実行される
これは1つのテーブルのリフレッシュが完了次第、次のテーブルのリフレッシュが開始されるイメージです。

・差分ミラーリングの場合⇒トランザクションIDの順に実行される
これは複製元ソースで処理されたトランザクションの順番に処理されるイメージです。外部キーを持った親子テーブルをグループ化していた場合にも正しい順番で処理されることを意味します。親子テーブルはグループ化しないと意図した順番にレプリケーションされませんので、グループ化は必須です。


※全件リフレッシュに限り優先順位を指定可能


※親子テーブルをリフレッシュする場合にはリフレッシュ前のTRUNCATEによる複製先ターゲットのテーブルのレコードの削除は設定した優先順位とは反対の順番で行う必要があるが、DBMotoではそのオプションも用意されている

●まとめ(グループ化の利点)

まとめると下記の通りです。

・レプリケーションの設定を1つにまとめられる
・DBへの接続セッション数を減らすことができる
・外部キーを持つ親子テーブルも安全にレプリケーションできる

関連したトピックス

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください