背景:
主なエンティティが顧客であるアプリケーションがあります。このアプリケーションのすべての情報は、顧客から始まります。これをなんらかのパーティショニングに使えたらいいなと思いました。Azure SQL Database をバックエンドとして使用するサービスを設計しました。
表は次のようになります (簡潔にするために、関連する部分のみを残しています)。
TABLE dbo.Orders
(
CustomerId INT NOT NULL DEFAULT( FEDERATION_FILTERING_VALUE( 'FEDERATION_BY_CUSTOMER' ) ),
OrderId INT NOT NULL,
....,
CONSTRAINT PK_Orders PRIMARY KEY CLUSTERED ( CustomerId, OrderId )
) FEDERATED ON ( FEDERATION_BY_CUSTOMER = CustomerId );
これにより、クレイジーなことを実行できるようになりました。すべての SQL 関連のものへのエントリ ポイントには、常に次のコマンドが最初に含まれます。
USE FEDERATION GroupFederation( FEDERATION_BY_CUSTOMER = 1 ) WITH RESET, FILTERING = ON
この場合、このステートメント:
SELECT * FROM Orders
また
INSERT INTO Orders ( OrderId ) VALUES ( 10 );
問題なく動作し、特定の顧客のデータのみを処理します。CustomerId COLUMN は常にシステム関数 FEDERATION_FILTERING_VALUE から推測されます。
これで、問題なく単一のデータベースにすべての顧客を含めることができ、顧客は互いに分離されます。将来、そのうちの 1 つが大きくなりすぎた場合、その特定の顧客 ID でフェデレーションを SPLIT することができ、それをサポートするためにコードを変更する必要はありません。
それぞれの顧客を個別のフェデレーション データベースに格納できますが、それを使用するサービスはそれについて何も知りません。
私たちはソリューションに非常に満足しており、私はそれを思い付くのが非常に賢いと思いました. Microsoft が、今後登場する新しい azure データベース エディションで azure フェデレーション機能を廃止することを発表したのはつい最近のことです。詳細については、こちらとこちらをご覧ください。
私の問題を見ていただければ幸いです。私の代替案は何だと思いますか?Azure フェデレーションを使用していますか? また、どのように移行しますか?
ありがとうございました。