私のサーバー側のJavaプログラムの一部を最適化するのに助けが必要です。私はできるだけ説明を簡潔にしようとします。複数の反復で使用されるJPAクエリの最適化機能
私は、A、B、Cの3つのオブジェクトの機能を最大限にする必要があるJavaサーバーを持っています。私は常に3つのうちの最小のフィッティングを見つけて、データベースで見つかった別のランダムなものに置き換えます。
約100回の反復には約2.5秒、250回の反復では約9秒です。
私は、最も時間がかかるものを見つけようとしましたが、JPAクエリでは時間の約70%を失います。私は問題は、毎回ランダムな新しいObjectを取得するためのクエリを実行することだと思います。
Query q = em.createQuery("SELECT object FROM Obj o WHERE .... ORDER BY random()");
設定パラメータobjがA、B又はCの各タイプは、それがPostgresのDBに独自のテーブルの有するいずれかとすることができる
q.setFirstResult(0)
q.setMaxResults(1)
List<Obj> myMcb = q.getResultList();
。
1つのクエリから多くのデータを取得し、Javaリスト内の「検索」を行うソリューションはありますか? JPAでのキャッシュやJavaでのマルチスレッドを利用する方法はありますか? 私のアプローチに関する他のアイデアは?私はこれのようなものを初めて実装することは即興的なものです。
Select *は何行返されますか?代わりに単一行を返すネイティブクエリを考えてみましょう。 – farrellmr
「ランダム」がJPQL関数であったのはいつですか?ヒント:そうではない –
@farrellmrデータベースには数千ものオブジェクトがあると思う。私は今夜ネイティブクエリーを行い、パフォーマンスがどれくらい向上するかを見てみましょう。 – silidragos