8

背景:

主なエンティティが顧客であるアプリケーションがあります。このアプリケーションのすべての情報は、顧客から始まります。これをなんらかのパーティショニングに使えたらいいなと思いました。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 フェデレーションを使用していますか? また、どのように移行しますか?

ありがとうございました。

4

3 に答える 3

2

唯一の選択肢は、ソフトウェアを書き直すことです。Microsoft がカスタム シャーディング ソリューションの方が優れていると言っているのは嘘です。実際、彼らは何年も前から、カスタム シャーディングよりもフェデレーションを優先すべき理由を説明し、接続プール、スケーリング時のダウンタイムがないこと、シャードを管理するためのカスタム コードがないことなど、非常に確固たるポイントを提供してくれました。そのため、彼らは非常に高価なプランのみを顧客に提供することに決めました。フェデレーションは非常に安価で非常にスケーラブルであるため、もはやフェデレーションの場所はありません。

トランザクション率がそれほど高くない場合は、Amazon RDS を試すことができます。シャーディングはありませんが、1 秒あたり最大 30000 トランザクションを提供します。これは、非常に大規模な Web サイトであっても大量です。PostgreSQL RDS 用にソフトウェアを書き直しましたが、とても満足しています。ネイティブ JSON サポート、配列、複数の CASCADE パスなど、SQL Server よりもはるかに多くの機能を備えています。

1 秒あたり 30000 トランザクションでは不十分な場合は、サーバーの数を増やして、ユーザー名またはその他のプロパティに基づいてデータを分割します。

Username starts with letter
a-d                         | connect to Server 1
e-g                         | connect to Server 2
h-s                         | connect to Server 3
t-z                         | connect to Server 4

上記の例では、1 秒あたり 120000 のトランザクションを実行できます。サーバーは 4 台しかないため、接続プールに問題はありません。

于 2014-08-03T13:05:28.580 に答える
1

MS はフェデレーションから移行するためのユーティリティをリリースしました

http://code.msdn.microsoft.com/vstudio/Federations-Migration-ce61e9c1
http://channel9.msdn.com/Blogs/Windows-Azure/Azure-SQL-Database-Federations-Migration

于 2014-10-02T15:09:17.927 に答える