中央サーバーと、d1、d2、d3、d4、d5 などのいくつかの地域サーバーがあります。
コピーするテーブルがいくつかあります。話を簡単にするために、d1、d2、d3、d4、d5、および c に存在し、これらすべてのサーバーで同じ構造を持つ tblFoo というテーブルがあると仮定します。ルールは簡単です:
リーリー
問題は: d1でupdateまたはdeleteステートメントを実行し、その条件が他のリージョンサーバー(d2、d3、d4、d5)で満たされる場合、正しく実行されます。 d1 では update ステートメントと delete ステートメントを実行しますが、同じステートメントが d1 で実行されると、c サーバーの他のリージョンのレコードを誤って更新/削除する可能性があります。
この問題を解決するには、ステートメントを検証し、次の条件のいずれかが満たされない場合に例外をスローすることをお勧めします。
###質問###
P粉3331862852024-01-11 13:56:49
これが私が問題を解決した方法です。
コピー動作を持つモデルは次の検証を実行します:
リーリーQuery
クラスには、必要な検証をトリガーする isReplicate
メソッドがあり、条件が確実に満たされるように where
メソッドがオーバーライドされています。正しく検証されました :