問題タブ [second-level-cache]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
282 参照

nhibernate - NHibernateの親子関係:NHはエンティティキャッシュの親を更新しますか?

親子関係にある子を更新すると、子は L2 キャッシュで更新されます。しかし、親はどうですか?データベースにアクセスせずにこれを行うことは可能ですか?

ありがとう!

0 投票する
1 に答える
764 参照

hibernate - 第2レベルのキャッシュと関連付けを休止状態にする

私のクラスの映画には、監督と@OneToOneの関係があり、俳優と@ManyToManyの関係があります。これらすべてのクラス(映画、監督、俳優)のクラスは読み取り専用モードでキャッシュされ、コレクションも同様です。

ehCacheでHibernateの第2レベルのキャッシュを使用します。

関係はLAZYであるため、次の問題があります。ムービーがgetDirector()またはgetActors()を呼び出さずに第2レベルのキャッシュに到達した場合、これらのメソッドがその後Session.merge()なしで呼び出されると、LazyInitializationExceptionが発生します。これは私にとっての選択肢ではありません。

「キャッシュに入れる」というイベントにフックして、怠惰なメソッドを呼び出すことができれば、私の問題は解決すると思います。そんなことありますか?アプリケーションなどに応じて第2レベルのキャッシュがオン/オフになるため、カスタムインフラストラクチャコードを作成するのは気が進まない。

私は何か他のものが欠けていますか?

ありがとう。

0 投票する
2 に答える
412 参照

nhibernate - NHibernate - 並行性と第 2 レベルのキャッシュを備えたカウンター

私はNHibernateを初めて使用し、現在のWebサイトに設定するのに苦労しています。この Web サイトは、1 つのデータベース サーバーを備えた複数の Web サーバーで実行されるため、同時実行の問題に直面することになります。この Web サイトには推定 50,000 人ほどのユーザーが登録されており、各ユーザーにはプロフィール ページがあります。このページでは、Facebook と同じように、他のユーザーが別のユーザーを「いいね」することができます。これは、並行性の問題が発生した場合です。

複数の Web サーバーを使用するため、おそらく MemChached プロバイダーを使用して、2 番目のレベルのキャッシュを使用することを考えていました。NHibernate を使用してこのような「いいね」機能を実装する最良の方法は何ですか? 次の3つの選択肢を考えていました。

  1. シンプルな Count() クエリを使用します。テーブル「User_Likes」があり、各行はあるユーザーから別のユーザーへのいいね! を表します。いいねの数を表示するには、単純にデータベースに変換されるユーザーのいいねの数を尋ねますSELECT COUNT(*) FROM USER_LIKES WHERE ID = x。ただし、ユーザーがプロファイル ページにアクセスするたびに、別のユーザーと同様に、いいね! の数を再計算する必要があるため、これには大きなパフォーマンスの低下が伴うと思います。
  2. ユーザー テーブルで追加のNumberOfLikes列を使用し、ユーザーが別のユーザーを好きまたは嫌いなときにこの値を増減します。ただし、これにより同時実行の問題が発生します。単純な for ループを使用して、2 つのサーバーでユーザーを 1000 回いいねしてテストしたところ、データベースの結果は合計で約 1100 いいねでした。それは 900 の違いです。現実的なテストであろうとなかろうと、これはもちろんオプションではありません。さて、解決策として楽観的ロックと悲観的ロックを検討しました (そうですか?) が、現在のリポジトリ パターンは現時点ではこれを使用するのに適していないので、修正する前に知りたいと思います。これが正しい方法である場合。
  3. 2 と同様ですが、カスタム HQL を使用して update ステートメントを自分で記述しUPDATE User SET NumberOfLikes = NumberOfLikes + 1 WHERE id = xます。これにより、データベースで同時実行の問題が発生することはありませんか? ただし、第 2 レベルのキャッシュが原因で、複数のサーバーでデータの不一致が発生するかどうかはわかりません。

だから...ここで本当にアドバイスが必要です。別のオプションはありますか?これは一般的な状況のように感じられ、確かに NHibernate はこれをエレガントな方法でサポートする必要があります。私はNHIbernateを初めて使用するので、明確で詳細な返信が必要であり、高く評価されています:-)ありがとう!

0 投票する
1 に答える
2124 参照

nhibernate - NHibernate.Cache.HashtableCacheProvider が本番環境での使用を意図していないのはなぜですか?

NHibernateのドキュメントと本NHibernate In Actionでは、キャッシュ プロバイダーNHibernate.Cache.HashtableCacheProviderは本番環境での使用を意図していないと述べています。しかし、私はこれの理由を見つけることができませんでした。誰も理由を知っていますか?

0 投票する
1 に答える
393 参照

nhibernate - nHibernate の熱心な読み込み - 奇妙な更新動作

私のドメインは、いくつかのターミナルを含む空港であり、各ターミナルにはゾーンなどが含まれています。
空港/ターミナル/ゾーンのエンティティの数が非常に少ないため、次のことを行いたいと思い
ます。1. 空港を取得するときに、すべての階層を熱心にロードします。
(次の流暢な構成を使用:

)
2. 第 2 レベルのキャッシュを有効にして、空港オブジェクトのすべての取得が DB にヒットしないようにします。

熱心な読み込みとキャッシングは正常に機能しますが、次のテストでは奇妙な動作が発生します。
(次のコードは空港エンティティを 2 回取得し (2 回目は DB にヒットしません)、そのうちの 1 つを更新します。)

結果の出力を参照してください。

最初に
NHibernate を選択します: Id36_0_ として airport0_.Id を

選択します。 Terminals0_.Id は Id1_、terminal0_.Id は Id50_0_、terminal0_.Name は Name50_0_、terminal0_.IsDeleted は IsDeleted50_0_、terminal0_.Airport_id は Airport4_50_0_ FROM dbo.[ターミナル] WHEREterminal0_.Airport_id=@p0;@p0 = 1

NHibernate: Zone0_.Terminal_id を Terminal4_1_ として、zones0_.Id を Id1_ として、zones0_.Id を Id51_0_ として、zones0_.Name を Name51_0_ として、zones0_.IsDeleted を IsDeleted51_0_ として、zone0_.Terminal_id を Terminal4_51_0_ として選択します。 ;@p0 = 2


秒の選択
それらは同じ空港インスタンスですか?False

ターミナル
を 追加
する

.[Terminal] (Name, IsDeleted, Airport_id, Id) VALUES (@p0, @p1, @p2, @p3);@p0 = '2 番目の空港に追加されたターミナル', @p1 = False, @p2 = NULL, @ p3 = 16
NHibernate: UPDATE dbo.[Airport] SET Name = @p0, IsDeleted = @p1 WHERE Id = @p2;@p0 = 'test airport', @p1 = False, @p2 = 1

NHibernate: UPDATE dbo.[ Terminal] SET Name = @p0, IsDeleted = @p1, Airport_id = @p2 WHERE Id = @p3;@p0 = 'test terminal', @p1 = False, @p2 = 1, @p3 = 2

NHibernate: UPDATE dbo.[Zone] SET Name = @p0, IsDeleted = @p1, Terminal_id = @p2 WHERE Id = @p3;@p0 = 'test zone', @p1 = False, @p2 = 2, @p3 = 3

NHibernate: UPDATE dbo.[ターミナル] SET Airport_id = @p0 WHERE Id = @p1;@p0 = 1, @p1 = 16



私の問題は次のとおりです:
1. すべてを更新する奇妙な更新動作...
2. firstAirport と secondAirport が同じオブジェクトではないという事実 (おそらく、第 2 レベルのキャッシュについて何かが欠けているのでしょうか?)

事前に感謝します、
Jhonny

0 投票する
1 に答える
238 参照

hibernate - クエリ結果をキャッシュするための第2レベルのキャッシュサポートはエンティティを除外しますか

通常のクエリ方法:

この場合、リスト内のオブジェクトは「エンティティ」です。それらはキャッシュされます。

ただし、hqlが次のような場合、キャッシュは機能するのでしょうか。

これで、結果リストのオブジェクトのタイプはResultになります。

私の質問は、結果オブジェクトを第2レベルのキャッシュに保存できるかどうかです。

ResultTransformerもどうですか?

この場合、q.list()内のオブジェクトのタイプはMapになりますが、これらのマップもキャッシュできますか?

0 投票する
2 に答える
8145 参照

java - 問題: ソフトロックされたキャッシュ エントリが、基礎となる Ehcache によって期限切れになった

次の警告が表示されますが、どうすればよいかわかりません。禁止 IP が更新されるたびに、Tomcat の catalina.out ログ ファイルにこの警告を書き込むエントリが約 80000 あります。

ehcache.xml ファイルの BannedIP の構成:

どんな助けでも大歓迎です。

0 投票する
1 に答える
1715 参照

java - 2次キャッシュがHibernateで機能しているかどうかを判断する際の問題

プロジェクトでehcacheを使用しようとしています。hibernate構成ファイルで次のプロパティを指定しました-

config.setProperty( "hibernate.cache.provider_class"、 "org.hibernate.cache.EhCacheProvider"); config.setProperty( "hibernate.cache.provider_configuration_file_resource_path"、 "ehcache.xml"); config.setProperty( "hibernate.cache.use_second_level_cache"、 "true"); config.setProperty( "hibernate.cache.use_query_cache"、 "true");

結果がDBからのものか、キャッシュからのものかはまだわかりません。

私は周りを見回して、 -Hibernateの第2レベルのキャッシュ- 人がHitCount /MisscountAPIを提案している結果を出力することを発見しました

しかし、私がそれを使おうとすると、ヒットカウントとミスカウントは常に0を返します...これが私のコードです

String rName = "org.hibernate.cache.UpdateTimestampsCache"; 統計統計=HibernateHelper.getInstance()。getFactory()。getStatistics(); long oldMissCount = stat.getSecondLevelCacheStatistics(rName).getMissCount(); long oldHitCount = stat.getSecondLevelCacheStatistics(rName).getHitCount(); UserDAO user = new UserDAO(); user.read(new Long(1)); long newMissCount = stat.getSecondLevelCacheStatistics(rName).getMissCount(); long newHitCount = stat.getSecondLevelCacheStatistics(rName).getHitCount();

if(oldHitCount + 1 == newHitCount && oldMissCount + 1 == newMissCount){System.out.println( "DBから来ました"); } else if(oldHitCount + 1 == newHitCount && oldMissCount == newMissCount){
System.out.println( "キャッシュから取得"); }

間違って使用している場合はお知らせください。この場合、rName(リージョン名)はどうあるべきですか。

2番目のレベルのキャッシュが機能しているかどうかを判断する他の方法はありますか?

ありがとう

0 投票する
2 に答える
404 参照

hibernate - 同時作成イベント

JBoss 5.1.0 GAをHibernateと一緒に使用しており、現在、第2レベルのキャッシュを有効にしようとしています。Hibernate構成に次のプロパティを追加しました。

そして、私はめったに変更しないと予想するエンティティに次のように注釈を付けました。

これは、ドキュメントの私の理解に基づいています。

アプリケーションは、恐ろしいメッセージ(ログストリームのWARNまたはERRORメッセージなど)なしで正常にデプロイされます。しばらくの間、キャッシュが機能していることを確認します(これを確認するために、Hibernate統計を使用しています)が、しばらくすると、フォームのスタックトレースを取得します(リモートアクセスがまったくないシングルユーザーとしてログオンした場合でも):

「トランザクションはMYCLASSを新たに作成しようとしました。このトランザクションが開始されてから、別の(おそらくリモートの)トランザクションによってすでに作成されています。同時作成イベントがあります。」

次の形式の巨大なスタックトレースが続きます。これは、最終的に私が作成した名前付きクエリにまでさかのぼります。

名前付きクエリには、キャッシュ用の追加のアノテーションはありません。

この問題を解決する方法についてのアドバイスをいただければ幸いです。

0 投票する
3 に答える
1072 参照

nhibernate - AppFabricキャッシングのローカルキャッシュが機能していません...何が間違っていますか?

appfabricを、顧客向けWebサイトと管理者Webサイトで構成されるNHibernateasp.netアプリケーションの第2レベルのキャッシュとして使用しています。これらは両方とも同じキャッシュに接続されているため、管理者が何かを更新すると、顧客向けのサイトが更新されます。

正常に機能しているようです。別のサーバーにCacheCLusterがあり、すべて問題ありませんが、localcacheを有効にしてパフォーマンスを向上させたいのですが、機能していないようです。

このように有効にしました...

最初はタイムアウト無効化ポリシー(3分)を使用しようとしましたが、アプリはより高速に実行されているように感じました。ただし、管理サイトで何かを変更すると、ライブサイトですぐに更新されることに気付きました。通知ではなくタイムアウトを使用しているため、これはローカルキャッシュが照会されていないことを示しています(または照会されていますが、常に欠落しています)。

cache.GetType()。Nameは「LocalCache」を返すため、ファクトリはローカルキャッシュを作成しました。

開発環境(vs2008からローカルで実行されているasp.netアプリ、別のw2k8マシンで実行されているキャッシュクラスター)のPSで「Get-Cache-StatisticsMyCache」を実行すると、少数のリクエストカウントが表示されます。ただし、本番環境では、リクエスト数が劇的に増加します。

ここでの方法に従って、キャッシュcliebt-serverトラフィックを取得しようとしました... http://blogs.msdn.com/b/appfabriccat/archive/2010/09/20/appfabric-cache-peeking-into-client-amp -server-wcf-communication.aspx ですが、ログファイルには最初のヘッダーしかありませんでした。つまり、logginもありません。

SOやGoogleで何も見つかりません。

何か間違ったことをしましたか?AppFabricの厄介なインストールがありますか?WebPlatformインストーラーを介してインストールしました-私は思いますか?(注:ASp.netを実行しているIISボックスはクラスターにありません-それは単なるクライアントです)。

どんな洞察も大いに受けました!