1

私はすでにいくつかのリソースを見てきましたが、明確にして意見を求めたいだけです。

まず第一に、問題を完全に回避するために、ID 列を主キーとして使用するのではなく、それらを自分で生成し、作成時に常に一意であると仮定して、それらの値を両方の方法でレプリケートすることができます。

この質問の目的のために、グローバル アクセスの問題を解決するための 2 方向以上のレプリケーションについて話しているのですが、ID 列があります。

ここで、トランザクション レプリケーションを設定しています。両方のデータベースが相互にレプリケートされるはずです。

私が理解しているように、各データベースサーバーにシード値の範囲を割り当て、これらを使用します。交差しない範囲を指定した固有の原因があることがわかります。これは、レプリケーション中にこれらの値がシード列に挿入されるということですか?

したがって、各サーバーが 10 行を挿入したら、範囲 1 ~ 10 および 11 ~ 20 を 2 つのサーバーに割り当てると、両方のデータベースにシード 1 ~ 20 が含まれますか?

4

1 に答える 1

4

ID列(およびトリガーやその他の制約)に適用できるオプション「NOT FOR REPLICATION 」があります。

あなたの例では、server1 は 1 ~ 10 をシードしますが、レプリケートされた 11 ~ 20 を単に受け入れます。

シードを設定するには、いくつかの方法があります。

次のいずれか: このように NOT FOR REPLICATION でシード/増分を設定します

  • シード 1、インクリメント 2
  • シード 2、インクリメント 2
  • シード -1、インクリメント -2
  • シード -2、増分 -2
  • シード 1000000001、増分 2
  • シード 1000000002、増分 2
  • シード -1000000002、増分 -2
  • シード -1000000001、増分 -2

これにより、8 台のサーバーでサーバーあたり 500,000,000 が得られます

または: ServerID という 2 番目の列を追加して複合キーを指定し、ID 列に NOT FOR REPLICATION を使用します。

これは、サーバーあたり 2^32 行の tinyint の場合、たとえば 256 サーバーまでスケールアップします。

どちらの方法でも機能します...

于 2008-10-21T18:43:25.200 に答える