多くの学生が本を購入できるオンライン大学書店アプリがあります。学生がログオンするたびに、以前の購入履歴に基づいた提案のリストが表示されます。顧客データを格納するSQLServerはシアトルにありますが、これらの学生は世界中からログオンしています。したがって、パフォーマンスが低下し、WANを介して遠くにいる人は、クエリのタイムラグが発生する可能性があります。
遠くにいる生徒にページの読み込み時間が遅くなる代わりに、レプリケーションを使用して複数のサイトのデータベースオブジェクトをコピーおよび維持し、後で同期して一貫性を維持することができます。各サイトは、最も関連性が高く、最も頻繁に使用されるデータを含むデータベースの部分を保持しています。これで、各学生はWebサイトで本を購入でき、データは後で同期されます。
データレプリケーションの仕組み
サーバーコンポーネントはいくつかあり、レプリケーションを実装するためにさまざまな役割を果たします。パブリッシャーロールは、データのソースが存在するデータベースインスタンスであり、複製記事として設計されたオブジェクトが含まれています。これらの記事はグループ化されて出版物に公開されるため、データは1つの単位として複製されます。出版社は複数の出版物を持つことができます。
ディストリビューターの役割は、ディストリビューションデータベースを保持するデータベースインスタンスです。各パブリッシャーは、サブスクライバーに渡されるパブリッシャーからの複製データを格納する単一のディストリビューションデータベースにマップされます。ディストリビューターはローカルディストリビューターとして設定できます。つまり、単一のサーバーインスタンスがパブリッシャーとディストリビューターの両方の役割を果たします。ディストリビューターが別々のサーバーに構成されている場合、それはリモートディストリビューターと呼ばれます。
サブスクライバーロールは、パブリケーションをサブスクライブすることによって複製されたデータを受信するインスタンスです。サブスクライバーは制限されておらず、複数のパブリッシャーからデータを受信する資格があり、レプリケーションの種類に応じてオブジェクトが更新される場合があります。該当する場合、パブリッシャーはサブスクライバーからこれらの変更を受け取り、データを再公開します。
一般に、サブスクライバーは、プッシュサブスクリプションまたはプルサブスクリプションの2つの方法でデータへの変更を受け取ります。違いは、どのサーバーコンポーネントが更新を実行するかです。プッシュを使用すると、ディストリビューターはサブスクライバーデータベースをプッシュまたは直接更新します。プルを使用すると、サブスクライバーはディストリビューターにチェックインして変更があったかどうかを確認し、ディストリビューター自体が更新を実行します。
3種類のデータレプリケーション
レプリケーションを実装するために、いくつかのエージェントを使用して、変更のコピー、変更の追跡、およびデータの配布に関連するジョブを実行します。必要なエージェントは、使用するレプリケーションのタイプによって異なります。レプリケーションには主に3つのタイプがあります。
1。スナップショットレプリケーション
スナップショットレプリケーションは最も単純なタイプのデータレプリケーションであり、データがそれほど頻繁に変更されない場合、または少量のデータをレプリケートする必要がある場合に使用されます。たとえば、あまり更新されないテーブルがある場合は、Snapshot Agentを使用して、データベース全体をスケジュールに従って1回または繰り返しコピーできます。次に、配布エージェントはこれらのファイルをサブスクライバーに転送する責任があります。
配布されるのは特定の時点でのデータのスナップショットであるため、この手法ではメンテナンスはほとんど必要ありません。また、サブスクライバーが更新を受信するたびにデータのコピー全体が上書きされるため、変更を監視する必要はありません。
残念ながら、データベース全体をコピーすると、待ち時間が長くなったり、必要以上に待機したりする可能性があります。スナップショットを生成するには、オブジェクトをロックする必要があります。データが頻繁に変更され、パフォーマンスに影響を与える可能性がある場合(たとえば、パブリッシャーに挿入、更新、および削除のアクティビティが多数ある場合)は便利ではありません。
スナップショットエージェントを使用してスナップショットを作成することに加えて、トランザクションレプリケーションはディストリビューターで実行されるログリーダーエージェントも利用します。 Log Reader Agentは、パブリッシャーデータベースのトランザクションログを読み取り、データベース全体を待機するのではなく、マークされた変更のみを配信します。これにより、公開するデータベースの量(列など)を決定する余地が得られるため、柔軟性が提供されます。次に、ディストリビューションエージェントはトランザクションをサブスクライバーに移動し、ディストリビューションエージェントが実行される場所で、それぞれプッシュサブスクリプション戦略とプルサブスクリプション戦略に対応します。
2。トランザクションレプリケーション
標準のトランザクションレプリケーションは、サブスクライバーのデータが読み取り専用であることを意味します。ただし、サブスクライバーで変更を行うことができるさまざまなパブリケーションタイプがあります。これらの変更が行われた場合、それらを再発行するために発行者に中継することができます。キューリーダーエージェントは双方向のトランザクションレプリケーションに使用され、キューから変更を読み取り、パブリッシャーでそれらを適用します。
トランザクションレプリケーションは、パブリッシャーとサブスクライバーでリアルタイムに変更を加えることができるサーバー間環境で非常に役立ちます。たとえば、航空会社で現在利用可能なフライトに関するリアルタイムデータなどです。この場合、スナップショットレプリケーションを使用することは意味がありません。これは、更新が通常1日に1回、またはスケジュールに従って同期されるためです。
3。レプリケーションのマージ
マージレプリケーションはトランザクションレプリケーションに似ていますが、サブスクライバーとパブリッシャーの両方で更新をマージできます。多くのサブスクライバーは、オフラインになり、さまざまな時間にデータを更新してから、オンラインに戻って後でそれらの変更を同期することができます。
このタイプのレプリケーションは、モバイルクライアントなどのサーバー間環境で使用される可能性があります。スナップショットやトランザクションレプリケーションと同様に、最初のスナップショットはスナップショットエージェントによって作成されますが、その後、マージエージェントは変更を追跡し、トリガーとの競合を解決します。複数のサブスクライバーが同じ行を更新している場合、問題が発生する可能性があります。したがって、競合の解決を考慮する必要があります。