1

Spring が提供するソリューションを使用してマルチテナント アーキテクチャに移行することを決定したアプリケーションに取り組んでいるため、パラメータの値に応じてデータを各データソースにルーティングします。このパラメーターは、クライアント ID に応じて 1 から 10 までの数値であるとしましょう。

ただし、これには新しいデータソースを追加するたびにアプリケーション コンテキストを変更する必要があるため、最初に次の解決策を考えました。

  • 異なる IP と同じスキーマを指す 10 個 (またはそれ以上) のデータソースから始めますが、最終的にはすべて同じ物理データベースにルーティングされます。使用するデータソースに関係なく、この最初のシナリオでは、データは同じスキーマに送信されます。
  • データは同じスキーマにあるため、同じテーブルがデータソース間で共有されますが、各行は各データソースにしか表示されません (すべての CRUD 操作で固定の where 句を使用)。
  • パフォーマンスの問題が発生した場合は、別のデータベースを作成し、一部のクライアントを新しいスキーマに移行し、データソースの 1 つの IP を新しいデータベースに再ルーティングして、この新しいデータベースが古いデータベースの負荷の一部を取得するようにします。

このアプローチに欠点はありますか? 私は心配しています:

  • ACID プロパティが失われる
  • hibernate sessionFactory と二次キャッシュの問題
  • テーブルのロックの問題

Spring 3.1、Hibernate 4.1、MySQL 5.5 を使用しています。

4

1 に答える 1

0

あなたのスプリングリンクは少し時代遅れだと思います.hibernate 4はそれ自体でマルチテナンシーをかなりうまく処理できます. ただし、負荷が非常に高い場合(データベースベンダーがソリューションを提供しない場合)、新しいスキーマのセットアップと初期化はプログラムで比較的簡単に(たとえば登録時などに)実行できるため、複数のスキーマアプローチを使用することをお勧めしますこれをアプリケーションに透過的にするために) 複数のデータベース アプローチが必要です。データベース URL にテナント ID を組み込むか、その場合はhttp://docs.jboss.org/hibernate/orm/4.1/ devguide/en-US/html/ch16.html

于 2013-04-28T20:02:16.367 に答える