2011-11-10 11 views
7

SQL Serverでマルチテナント用の実装を検討しています。ここで説明する共有データベース、共有スキーマ、テナントビューフィルタを検討しています。マルチテナントアプリケーションでSQL Serverが断片化した接続プールのパフォーマンス

「SQLビューは、個々のテナントを付与するために使用することができます内の行の一部にアクセスします。唯一の欠点は、次のようにテナントビューフィルターが記述されている...

http://msdn.microsoft.com/en-au/architecture/aa479086パー、断片化された接続プールです

SQLでは、ビューはSELECTクエリの結果で定義された仮想テーブルで、結果としてビューがクエリされ、ストアドプロシージャで使用されているかのように使用できます。実際のデータベーステーブル。たとえば、次のSQL文はEmployeesというテーブルのビューを作成します。このテーブルはフィルタリングされています。シングルテナントに属するトン行だけが表示されている:この文はあなたが思い出した、(データベースにアクセスするユーザーアカウントのセキュリティ識別子(SID)を取得

CREATE VIEW TenantEmployees AS 
SELECT * FROM Employees WHERE TenantID = SUSER_SID() 

、アカウントです

これを考えると、5,000の異なるテナントが格納されているデータベースが1つあれば、接続プールは次のようになります。完全に断片化され、要求がデータベースに送られるたびにADO.NETは新しい接続を確立して認証する必要があります(接続プールはそれぞれの固有の接続文字列で機能することを覚えておいてください)...

私はこれについて心配する必要がありますか?接続プールが忙しいマルチテナントデータベースサーバー(1秒あたり100リクエストを処理する)にどれだけ大きな影響を及ぼすかの実例を教えてください。問題でハードウェアをもっと投げてもいいのですか?

思考?

+0

あなたは、各テナントは、SQL Serverへの接続を確立した上で計画している、またはあなたが仲介サービスを持つことを計画している参照してください。WCF)どこにすべての要求がルーティングされますか? – Alexander

+0

要約:ドキュメントに記載されていることは悪い考えです... – usr

答えて

1

私の了解は、あなたのデータベース上で固いAPIを開発することです。スケーラビリティ、モジュール性、拡張性、アカウンティングが主な理由になります。あなたがSUSER_SID()で遊んでいることをあなたが誓っているかもしれない行の数年がたっているかもしれません。たとえば、複数のテナントを1つのアカウントまたはホワイトリストのような状況で管理する場合を考えてみましょう。

認証を担当するデータアクセスAPIがあります。あなたはまだDBレベルで認可を行うことができますが、それはまったく別の話題です。ユーザーとグループを持ち、テナントに許可を与えます。

しかし、巨大なプロジェクトの場合でも、大きなプレーヤー1つにつき1つのDBを持つ方が良いでしょう。

断片化された接続プールのパフォーマンスについての主な質問には答えられませんでしたが、それにもかかわらず多くの有効な引数があると確信しています。

関連する問題