2016-08-26 13 views
0

私はC#を使用してシングルテナントの弾性DBを作成したいと思う人は誰でもサンプル初心者のコードを提供することができます(マルチテナントのシャードが見つかりましたが、シングルテナントのシャード接続が必要です)。いくつかのサンプルリンクで私を助けてくれますか?AzureでシングルテナントElastic DBを作成して使用する方法は?

+0

私はあなたのためにいくつかのコードを記述する前にいくつか質問があります。プールを作成するコード、またはプール内のデータベースを探していますか?あなたのシャードマップは既に作られていますか?あなたはシングルテナントについて尋ねているので、サービス指向のデータベースアーキテクチャ(SODA)を構築しようとしていると思いますか? –

+0

こんにちはシャノンあなたの応答をありがとう、実際に私の要件は、それぞれの顧客は、単一のインスタンスを使用して1つのユニークなデータベースを持っています。彼らはそのユーザーのデータベースに接続するユーザー名を入力します。しかし、私はプロセスを開始する方法を知りません..私はマルチテナントを使用している場合、それは私が望んでいない範囲に基づいてデータを共有しています..私は間違って考えてください..ありがとう –

+0

私は思いますそれは用語の問題かもしれません。個別のデータを持つ顧客が複数いる場合は、複数のテナントを扱っています。各顧客はテナントです。あなたのシャードマップを作成するときに、範囲内でそれらを作成する必要はありません、あなたは単一の識別子を行うことができます。私は最も頻繁に整数を使用します。私は以下の答えで詳しく説明し始めます。 –

答えて

2

いくつかの簡単な用語から始めましょう。and a link from Microsoft私はあなたがAzureの弾性データベースを始めるためにあなたを歩いていくつもりです。

  • Database pool

    用語 - リソースを共有する1つの以上のデータベースを含むコンテナ。うまくいけば、お客様のクライアントデータベースのリソース使用量ごとに確実な測定値が得られたらと思います。プールには一定量のリソースが割り当てられますが、リソースの60%以上がクライアントの小さなサブセットで使用されると、他のクライアントはパフォーマンスが低下します。

  • Shard - お客様のアーキテクチャ内の単一データベース。データベースプールに入れることも、SQL Azureデータベース(PaaS)にすることも、Azure(IaaS)のVM上のデータベースにすることもできます。これは、構内データベースにすることもできます。

  • テナント - あなたのテナントはあなたの顧客です。

  • Shard map - 特定の顧客のデータを見つけるためのディレクトリとみなしてください。あなたのケースでは、各顧客に別々の断片を持たせたいと思う。

  • シャードキー - システム内の各テナントを表すコード。シャードキーのデータ型としてint、bigint、varbinary、またはuniqueidentifier(GUID)を選択できます

  • データ依存型ルーティング - シャードキーを使用して、そのシャードキーの関連データが格納されている場所を検索しますその別のシャードに接続して、何らかのデータタスクを実行します。データベース設計に

データベースアーキテクチャ

レッツ・ダイビングとデザインが弾性データベースを扱うことができる方法を介して動作。

現在のデータベース設計では、特定の顧客にログインするユーザーを追跡する何らかの方法があります。一部の設計では、ログイン要求のURL(https://.someservice.com)を解析することでこれを処理します。他の人はこの電子メールアドレスを追跡するデータベースを持ち、この(1つまたは複数の)顧客のデータにアクセスできます。このデータは特定の顧客とは直接関係していないため、このデータをテナントの破片の外に保存する方法を検討する必要があります。おそらく、シャードマップマネージャを格納する場所と同じルートノード(またはルートシャード)に格納することができます。

システム内で機能を実行するのに役立つlogin-customerマップに関連する表がある場合もあります。これらもテナントのシャードからルートシャードまで移動する必要があります。

参照整合性をオンにして(必要に応じて)、ルートシャードに再配置する予定のテーブルへの外部キーを持つ顧客固有のデータがある場合は、その制約の

また、ある顧客からのログインが別の顧客のデータに影響しないようにする方法も考えなければなりません。各顧客が別々のデータベースにあるという事実をそのままあなたのコントロールに任せることはできません。実際、ソリューションを設計する際に、単一のホスト上ですべての顧客を実行できる非常に強力なSQLサーバーがあると仮定します。そうするならば、確実にアクセスを制御し、クロストークの問題を防ぐことができます。

基本的な解決策は、すべてのクエリでシャードキー(各テナントを一意に識別する)を含めることです。そうすれば、テナントがクエリの影響を受けているかどうかを確かめることができます。

これで、顧客テーブルからルートノードテーブルを分離し始めました。シャードマップマネージャとデータベースインスタンスごとの単一テナント戦略の実装について詳しく説明します。

シャード地図マネージャー

あなたのシャード・マップを構築するために行くときは、リストのシャード・マップを実装することになるでしょう。マップにシャードを追加すると、各インスタンスを使用する顧客が特定され、シャードマップはその顧客のデータベース接続文字列を検索するために照会できる4つのテーブルを作成します。

データベースには、定義された各シャードの最大および最小のシャードキー値が表示されますが、リストを実装するときは最小値の値しか表示されません。その後、各顧客はそれぞれのデータベースを取得します。

コードに入る前の追加手順 ポータルを使用して、基本プールを作成します。その後、ポータルを使用して新しいデータベースをプールに追加します。ポータルを使用してデータベースをプールに移動し、プールから戻します。それは、PaaSからIaasインスタンスに移動して作業負荷を処理する必要のある顧客のためのプランニングを開始するために重要です。

また、このプールとデモアプリケーション用のデータベースの一部が必要です。

grab the demo app microsoft provides.、あなたはそれに慣れているしたら、あなたがデモを実行するときは、6つのオプション表示されます:

  1. は別のシャード
  2. 挿入サンプルを追加破片
  3. の破片マップマネージャーとADDAカップルを作成します。データ依存型ルーティングを使用する行
  4. サンプルマルチシャードクエリの実行
  5. シャードマップマネージャデータベースとすべてのシャードを削除します。
  6. 終了。

これらの操作がどのように実行されるかをよりよく把握するために、コードを一度に1つずつ読み飛ばしてください。良いニュースは、新しいSQL接続の種類では、ハードワークの多くがあなたのために実行されます。データベースとアプリケーションをルーティングデータと顧客データの境界を越えようとしない作業単位に分解している限り、

これは巨大なトピックであり、スタックオーバーフローに関する新しいドキュメントのセクションに引き継がれ、これらを詳しく説明する必要があります。何度も繰り返しパッケージ化できるようにしたいと思う単一のソフトウェアソリューションを開発し、あなた自身のソフトウェアをサービスとして販売し始めるなら、この方法論に大きな利点があります!

関連する問題