Hibernateは、内部キャッシュとオブジェクト状態の管理のため、基本的にデータベース上のすべての操作にオーバーヘッドを導入しています。Hibernateでのフェッチパフォーマンスの向上
私たちが現在行っているアプリケーションでは、プレーンSQL(JDBC)を使用してデータを読み取り、Hibernateを使用して保存と更新を行うというものです。理由は、計算のたびに多くの情報をロードする必要がありますが、限られた部分だけを更新する必要があるということです。
今、私たちは、このアプローチは本当にクリーンではないことを知っていると私たちはHibernateの読書を微調整しようとしましたが、私たちが達成したことは、次のされていくつかのテストでした:
読む時間JDBC(session.doWorkを) :23秒
読む時間休止(怠惰とsession.createQueryフェッチ):94秒
オーバーヘッドを既存のHibernateの追加処理によるものであり、我々が読ん並列あれば、それ自体が任意の助けになる可能性が疑問に思ったことを私たちには思えます(私たちは並行して行うことができる多くのテーブルを読んでいます)? Hibernateのセッションとトランザクションは、複数のスレッドから安全に使用できるように設計されていますか?
また、他のアイデアがあれば、これをスピードアップするのに役立つものはありがたいです。
おかげではるかに高速になる傾向があり、それは、我々はすべてのことを試してみましたが、今はこの4倍のオーバーヘッドで立ち往生していることを縫い目。 – mario
@mario:プロファイリングを試しましたか?しかし正直なところ、生のJDBCの23秒ということは、たくさんのクエリを実行していることを意味します.Hibernateがすべてのリフレクション/ HQLオーバーヘッド(おそらく基準APIか、バッチ処理)(http:// docs.jboss.org/hibernate/orm/3.3/reference/en/html/batch.html))また、Hibernateは最速のJPAプロバイダではありません:http://www.jpab.org –
データが、クエリはほんのわずかです。私の本能は、2-5倍のオーバーヘッドが予想され、私たちの達成度(4倍)は期待通りであると私に伝えています。私はjpabをチェックする(これまで聞いたことがない)。ありがとう! – mario