最終的には一貫したデザイン、レイテンシー、バックログを実現

レプリケーション・セットが一貫しているのは、グループの1つのレプリケーション・ノードに対するSQLクエリが、グループのすべてのレプリケーション・ノードで同じ結果を生成する場合です。 異なるノード上のデータベースを同一に保つために、 IBM® Netezza® Replication Services は最終的に一貫性のある方法を使用します。

最終的に一貫性を持たせる方法では、1つのノード(プライマリ)が他のノードよりも新しいデータベース・コンテンツを持つ場合がある。 レプリカがプライマリから遅れる時間量をレイテンシと呼び、レプリカがレプリケートして適用しなければならないデータ量をバックログと呼ぶ。

レイテンシーとバックログは、特定の構成とワークロードに依存する。 IBM Netezza Replication Servicesの待ち時間の具体的な原因は以下のとおりである:
  • プライマリ・ノードがレプリケートされたデータに対してSQL更新トランザクション(INSERT、DELETE、UPDATEなど)を並行して実行できるかどうかは、現在のトランザクションの分離レベル(直列化可能またはスナップショット分離)に依存します。 レプリカは、プライマリでコミットされた順序でレプリケートされたトランザクションをシリアルに実行します。 プライマリ上で同時に複製されたトランザクションのセットを完了するのにかかる時間は、最も長いトランザクションにかかる時間と同じである。 しかし、レプリカ上で同じトランザクションを完了するのにかかる時間は、各トランザクションの実行時間の合計である。
  • ロードファイルデータは、プライマリホストで完全にロードされた後、レプリカホストにレプリケートされる。 すべてのロードファイルデータは、まずプライマリのレプリケーションキューマネージャーのログに完全に取り込まれ、その後データがレプリカに送信される。 トランザクションの全データが完全に転送されて初めて、レプリカはデータの適用を開始する。 レプリケーション・ログの転送にかかる時間は、データの総量をレプリケーション・キュー・マネージャ接続のウィンドウ制限帯域幅で割ったものであり、待ち時間に直接影響します。 IBM Netezza Replication Servicesは、同じトランザクションで複数のシーケンシャルロードがある場合、転送を開始する前にすべてのロードが完了するのを待たない。
最終的に一貫性のある設計は、 IBM Netezza Replication Servicesを大規模な実装に使用するアプリケーションに影響を与える。 設計上の注意点は以下の通り:
  • ゼロレイテンシーで実行されなければならないクエリーは、現在のプライマリーで発行されなければならない。 現在のプライマリは、レプリケーションセットの運用ビューから特定できる。
  • 低レイテンシで実行する必要があるクエリを実行するアプリケーションは、レプリケーションセットのオペレーショナルビューをチェックしてレプリカの現在のレイテンシを決定し、レイテンシが許容範囲内にあるレプリカにクエリをディスパッチします。
  • レイテンシーの影響を受けないクエリーは、レプリケーションセット内のどのNPSノードにもディスパッチできる。
  • 日付、時間、バッチ実行、その他の識別カラム値などの行データを使用して、特定の値よりも新しい結果を除外するようにクエリを設計することができます。