0

OpenJPA 1.2 から Hiberante 4.0 に移行しました
TimesTen DB を使用してい ます

私はネイティブクエリを実行して、必要なオブジェクトの ID を取得し、それぞれに対して検索を実行しています。OpenJPAfind の代わりにメソッドfindCache()を使用し、それが null を返す場合はfind()メソッドを使用します。休止状態では、find()メソッドのみを使用しました。

同じDBでこの操作を実行しました。

いくつかのテストを実行した後、OpenJPA のパフォーマンスがはるかに優れていることがわかりました。

(クエリを実行して同じオブジェクトを見つけた後) hibernate セッションの統計を出力したhit\missところ、最初のレベルのキャッシュへのカウントが常に 0 であることがわかりました。一方、OpenJPA は、メソッドを使用してオブジェクトをフェッチすることにより、そのキャッシュに明確に到達していますfindCache

Hibernate での find のパフォーマンスを改善するにはどうすればよいですか? このツールの第 1 レベル キャッシュの実装の違いに言及していると思われます。

別の事実: アプリケーションの実行時に同じ EntityManager を使用します (EntityManager の作成コストを最小限に抑える必要があります - 私のアプリはソフト リアルタイムです)。

ありがとう。

4

2 に答える 2

0

まず、ID の代わりに完全なオブジェクトを取得してみませんか。複数のオブジェクトを取得する 1 つの select ステートメントは、各項目を個別に取得するよりも何倍も高速です。

第 2 に、ハイバネート用の第 2 レベルのキャッシュが必要になる可能性があります。第 1 レベルのキャッシュは、ほとんどの場合、各セッション内で適用されます。

于 2012-10-31T07:11:09.530 に答える
0

Hibernate の第 1 レベルのキャッシュはセッションに対応します。そのため、セッションがまだ特定のオブジェクトをロードしていない場合、それはミスになります。セッション間で ID によってオブジェクトをキャッシュできるようにするには、第 2 レベルのキャッシュを有効にする必要があります。

詳細については、リファレンス ドキュメントを参照してくださいhttp://docs.jboss.org/hibernate/orm/4.1/manual/en-US/html_single/#performance-cache

于 2012-10-31T07:45:22.110 に答える