私は初めてのAzure開発者であり、シングルテナントのクラウドシステムを引き継いでおり、システムをマルチテナントに変換する役割を担っています。各テナントのSQLサーバーデータを分離する正しい方法は何ですか?
そのデータ収集と報告システム。各テナントは、データに関する独自のカスタムレポートを作成して実行する必要があります。では、マルチテナントでは、テナントがお互いのデータを見ることをどのように防ぐのですか?
Windows Azureなどのクラウドコンピューティング固有のアーキテクチャを使用しても、プログラミングで何かを行う「正しい」方法はありません。
MSDNドキュメントの大まかな検索 は、Azureが実際にクライアントのデータを分離するのに役立ついくつかの便利な機能を備えていることを示しています。各クライアントに独自のSQLサーバーインスタンスを与えるか、直接パーティション化するか、いくつかの組み込み機能を利用してパーティション化する共通インスタンスを代わりに使用できるように見えます。
これらのソリューションにはそれぞれ長所と短所があり、自分で評価する必要があります。選択に関するいくつかの概念的なガイダンス:
「シングルインスタンスからマルチインスタンスにデータをどのように移動するのか」という質問については、新しいアーキテクチャを構築してから古いデータをインポートすることが主な問題になると思います。とにかく、将来のクライアントのためにそれを行う方法を知りたいでしょう。
多くの人は、顧客ごとに1つのデータベースを持つという考えにすぐに飛びつきます。ほとんどの場合、それは不要であり、データベース構造の同期を維持するという追加の問題を引き起こします。もちろん、それらに異なるデータベース構造(異なるテーブルと列の定義)を持たせたい場合、またはデータベースへの直接アクセスを許可したい場合は、これが目的です。
マルチテナントシステムの最も一般的な方法は、組織または顧客IDを介してデータベース内のデータを論理的に分離することです。データが多かれ少なかれ正規化されていれば、データベースクエリを変更する必要がある場合でも、データベースクエリはそれほど複雑にならないはずです。