質問

すでにいくつかのリソースを見てきましたが、単に明確にして意見を聞きたいです。

まず、問題を完全に回避するために、主キーとしてID列を使用する代わりに、それらを自分自身で生成し、作成時に常に一意であると仮定して、両方の方法でそれらの値を複製することはできません。

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

トランザクションレプリケーションを設定しています。両方のデータベースが相互にレプリケーションする必要があります。

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

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

役に立ちましたか?

解決

" NOT FOR REPLICATION " ID列(およびトリガーやその他の制約)に適用できます。

あなたの例では、 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サーバーまでスケールアップします

どちらの方法でも動作します...

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top