2016-10-25 5 views
0

mongodbとgormのコンテキストでは、クライアントごとに異なるデータベースを用意する必要がある場合、マルチテナント(データベースモードの場合)と複数のデータソースのアプローチは、同じことを達成するための2つの解決策です。 ?複数のデータソースとマルチテナントの違いは何ですか?

複数のデータソースソリューション: http://gorm.grails.org/latest/mongodb/manual/#multipleDataSources

マルチテナントソリューション: http://gorm.grails.org/latest/mongodb/manual/#multiTenancy

答えて

0

まあ、彼らは同じ目的に

tldrを達成するためのものではありません。 マルチデータソースは、異なるオブジェクトに対して異なるデータベース(mongodbのみを使用する場合はコレクション)を持ち、マルチテナントは同じオブジェクトを格納しますが、クライアント固有のデータを識別するためのディスクリミネータを追加します。あなたの質問は、異なるクライアントため異なるデータベースをサポートする程度であれば

は答えがために、複数のデータベースを持っている(長い間)マルチテナントで

複数のデータソース

Grailsのサポートを行くことになります同じアプリケーション(同じベンダーとは異なるデータベースベンダーまたは異なるデータベースになる可能性があります)。目的は、特定のデータを別のdb/namespaceに格納することです。

たとえば、ビジネスのすべてのコアエンティティにdbを設定し、すべての監査/ログ記録用に専用のデータベースを持つことができます。複数のデータソースを使用するときは、専用のデータソースにオブジェクトをマッピングする

(OPコンテキストごとなどのデータベーステナント有する)マルチテナント

mutliテナント(データベーステナント)で一方、Grailsはありますクライアントがすべてのオブジェクトを格納する単一のデータベーススキーマ。クライアントAのデータはクライアントB以外のデータベースに格納されます。Grailsでは、必要に応じてオーバーライドできるデフォルトのテナントリゾルバが用意されており、コンテキストに応じてどのデータベースをクエリする必要があるかを判断します。

+0

@Fredericありがとう、これは私が考えたものです。マルチテナンシーは私のための答えと思われ、私はそれを実装します。しかし、理論的に言えば、たとえばクライアントが3つしかなく、異なるコレクションのmongodbデータベース(同じコレクション/ドキュメント)が必要なシナリオでは、複数のデータソースとマルチテナントの両方でMode = Databaseを使用しても同じ結果が得られます。右? – Zohaib

+0

よく注文書(PO)をデータベースに保存し、特定のクライアントのPOを一覧表示する場合は、現在のクライアントPOを取得するだけのマルチテナントを使用しますが、複数のデータソースを実装するとmongo接続を実装して、クライアントdbでクエリを実行し、システムからすべてのPOをフェッチしないようにする必要があります。 –

+0

"マルチテナントは同じオブジェクトを保存しますが、クライアント固有のデータを識別する識別子は追加しません。一方、「借用(データベーステナント)」では、Grailsはすべてのオブジェクトを格納するためのクライアント用の単一のデータベーススキーマを持ちます。必ず真です。 GORMは、データベースごとにテナント、スキーマごとにテナント、テナントをディスクリミネータ経由でサポートします。 –

関連する問題