web-dev-qa-db-ja.com

マルチテナンシーは、どのJava RAD Frameworksでも)実行可能なオプションですか?

私はフルスタックJava Web開発者として長年働いてきましたが、私が取り組んだすべてのプロジェクトのうち、2つのことが当てはまります。

  1. それらはすべて、1つのデータベース/ 1つのスキーマアーキテクチャを備えたマルチテナントアプリケーションでした
  2. 彼らはRapid-Application-Developmentフレームワークを利用したことはありません(J2EEとSpringのみ)

日常業務の多くでボイラープレートコードがたくさんあることは否定できないので、電力と妥協のない高速アプリケーション開発フレームワークを習得することに興味があります。マルチテナントアーキテクチャをサポートします。 DAOクラスの作成、テスト、保守に多大なエネルギーを費やす必要があります。また、CRUD操作が十分に安全で、あるテナントが別のテナントのデータにアクセス/変更できないようにする必要があるため、休止状態のオプションのようです。それは素晴らしい時間の節約になるように。

ただし、Hibernateは1つのdb/1つのスキーマであるマルチテナントデータベースをサポートしません。クライアントごとに個別のデータベースまたはスキーマを使用するという考えに震えます。一つには、私たちはリモートでホストされるので、多くの小さなクライアントのために多くのデータベースをサポートするコストは法外なものになると思います。第二に、多くの技術サポートがデータベース内のデータの異常を探すことに取り組んでおり、中央の場所にあるデータ全体をクエリできることは、非常に時間の節約になります。

Spring Bootはここでは良い選択のようですが、Hibernateに基づいているため、(1データベース/ 1スキーマの)ディスクリミネーターアプローチをまだ使用できません。 RADマルチテナント企業の開発にうまく機能するフレームワークはありますか?あるいは、既存のフレームワークにそのようなアーキテクチャを実装することは簡単/可能ですか?

2
IcedDante

RAD=-実際、これは最近ではほとんど使用されないフレーズです。SpringRooのようなテクノロジーはプロトタイピングには最適ですが、通常は商用アプリには使用されません。アプリに特定のカスタマイズの程度では、Rooはヘルプよりも厄介です。HibernateやVaadinなどのテクノロジー(RAD)と呼ばれることもあります)は、商用アプリで広く使用されています。

句にテナント基準を手動で追加し、新しいオブジェクトでテナントを指定すると、Hibernateは確実にマルチテナントを実行できます。もっと自動化したい場合は、SQLAlchemyのアプローチについてブログを書きました。 Hibernateでも同じことができます。 http://pajhome.org.uk/security/clouddata.html

別のオプションとして、仮想プライベートデータベース(行レベルセキュリティとも呼ばれます)があります。実行中のテナントごとのデータベースまたはアプリインスタンスを閉じないでください。私はあなたの反対意見を理解していますが、そのように機能する多くの非常に成功した(そして有益な)システムを見てきました。

1
paj28