16

複数のユーザーをサポートするWebアプリを作成しています。各ユーザーは、H2を使用して独自のデータベースを持っています。すべてのデータベーススキーマは同じです。

このアプリケーションにはSpring+Hibernateを使用したいと思います。

そのため、ユーザーのデータベースをそのユーザーに関連付ける方法に固執しています。おそらくHTTPSessionで関連付けて、SpringのAbstractRoutingDataSourceを拡張しますか?しかし、これはHibernateのキャッシュに影響しませんか?別の方法は、すべてのデータソースのスキーマが同じであっても、各データソースでSessionFactoryを使用することです...したがって、それは無駄だと思います。

とにかく、データソースの選択は動的である必要があります。新しいユーザーごとに独自のデータベースが作成されるため、コンテキストファイルで事前に構成することはできません。既存のフレームワーク/ソリューションはありますか?

私はHibernateShardsについてあまり知りません、多分それはうまくいくでしょうか?

4

3 に答える 3

8

いくつかのリソースで示唆されているように、データベースごとに1つ必要な(厳密な)必要性について間違っている可能性があります。SessionFactory

動的データソースルーティング

明日すべてを読み直し(すべての詳細を正直に理解することはできませんでした)、そのような設定の意味を完全に理解するために少し時間がかかります(ただし、第2レベルのキャッシュが壊れることは明らかです) 。これについては後でまた説明します。


複数のユーザーをサポートするWebアプリを作成しています。各ユーザーは、H2を使用して独自のデータベースを持っています。すべてのデータベーススキーマは同じです。

これはどのように拡張されるのだろうか...何人のユーザーがいますか?H2をどのように実行しますか、どのモードですか?

そのため、ユーザーのデータベースをそのユーザーに関連付ける方法に固執しています。おそらくHTTPSessionで関連付けて、SpringのAbstractRoutingDataSourceを拡張しますか?

ユーザーごとに作成SessionFactoryし、ログに記録されたユーザーに関連付けて(ログインをキーとして使用して)、指定されたからMapを取得する必要があります。のライフサイクルをHTTPセッションにバインドすることは(メモリを節約するために)良い考えのようですが、Springがここで非常に役立つかどうかはわかりません。私は間違っているかもしれませんが、クラスのバリエーションと完全にプログラム的なアプローチの方が簡単に見えます。ちなみに、ユーザーごとに複数の接続が必要になるかどうかはわかりません。SessionSessionFactorySessionFactoryHibernateUtil

しかし、これはHibernateのキャッシュに影響しませんか?

どのキャッシュですか?

別の方法は、すべてのデータソースのスキーマが同じであっても、各データソースでSessionFactoryを使用することです...したがって、それは無駄だと思います。

ああ、それは無駄ですが、それはあなたがやりたいことです(ユーザーごとに1つのデータベース)。そして、あなたには選択肢がありません(SessionFactoryデータベースごとに1つ必要です)。実際にユーザーごとに1つのデータベースが必要なのはなぜですか?これは賢明な決断だと思いますか?すでに示唆したように、これは多くの問題を意味し、適切に拡張できない、複雑さを増すなどです。単一のデータベースを使用してデータをユーザーに関連付けてみませんか?

とにかく、データソースの選択は動的である必要があります。新しいユーザーごとに独自のデータベースが作成されるため、コンテキストファイルで事前に構成することはできません。既存のフレームワーク/ソリューションはありますか?

私の知る限りではありません。それはまた、あなたがプログラム的にすべてをしなければならないと思う理由でもあります。

私はHibernateShardsについてあまり知りません、多分それはうまくいくでしょうか?

アプリケーションの動的なニーズを考えると、それがどのように役立つかわかりません。

于 2010-10-04T21:24:20.160 に答える
3

これはあなたを助けるかもしれません:

于 2010-10-04T08:01:32.913 に答える
1

2人(Pascalとorg.life.java)の助けに感謝します!

可能ですが、いくつかの問題があります。たとえば、休止状態の第2レベルのキャッシュ/クエリキャッシュ。

Pascalが提供するこのリンクは、非常に優れたリソースです。

http://www.jroller.com/kenwdelong/entry/horizo​​ntal_database_partitioning_with_spring

各ユーザーに個別のデータベースを提供する主な動機は、データが急速に増大する可能性があるため、水平分割が必要になるためです。

于 2010-10-06T09:09:09.673 に答える