問題タブ [scrollableresults]
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.
java - resultSet.setFetchDirection(ResultSet.TYPE_SCROLL_SENSITIVE)をSpringjdbcで使用することはできません。DaoSupportwithOracle
スクロール可能な結果セットを使用したいので、2行のコードを使用する場合:
私のDAOimplでは、例外が発生します。plzはそれらを解決するのに役立ちます、事前に感謝します。
これは例外です
////////////////////////////////////////////////// ////////////////////////////////////////
次のように変更すると、結果が得られませんでした。通常、プロシージャは100ユーザーを返します。
hibernate - JPAを使用してjavax.persistence.Query.getResultList()から結果をストリーミングすることは可能ですか?
私はJPAを初めて使用し、結果セットからデータをストリーミングできるかどうかを知りたいのですが、たとえば、最初の結果の処理を開始するためにクエリが実行されるのを待ちたくないということです。バッチの。
JPA APIまたはコミュニティが採用した回避策を使用する可能性はありますか?最終的にJPA実装の機能を使用しますか?
java - Hibernate ScrollableResults が結果セット全体を返さない
私たちが実行するクエリの中には、100,000 以上の結果があり、それらをロードしてクライアントに送信するのに永遠にかかるものがあります。そのため、ScrollableResults を使用して、ページ化された結果機能を使用しています。しかし、約 50,000 の結果を超えています (結果の数がまったく同じになることはありません)。
私は Oracle 10 ドライバーを使用して Oracle9i データベースを使用しており、Hibernate は Oracle9 ダイアレクトを使用するように構成されています。最新のJDBCドライバー(ojdbc6.jar)で試したところ、問題が再現されました。
また、いくつかのアドバイスに従い、注文句を追加しましたが、問題は再現されました。
以下は、私たちが何をするかを示すコード スニペットです。
では、なぜ結果セットを取得して、最後にもっと多くの結果が必要なのかを教えてくれるのでしょうか?
java - Hibernate の ScrollableResults を使用して 9,000 万件のレコードをゆっくりと読み取る
Hibernate を使用して MySQL データベースのテーブルの各行を読み取り、それに基づいてファイルを書き込むだけです。しかし、9,000 万行あり、かなり大きいです。したがって、次のものが適切であると思われました。
問題は、上記が while ループに移る前に 9000 万行すべてを RAM にロードしようとすることです...そして、 OutOfMemoryError: Java heap space exceptions :(.
ScrollableResults は私が探していたものではないと思いますか? これを処理する適切な方法は何ですか?この while ループに何日もかかったとしても、私は気にしません (そうならないようにしたいのですが)。
これを処理する他の唯一の方法は、setFirstResult と setMaxResults を使用して結果を反復処理し、ScrollableResults の代わりに通常の Hibernate の結果を使用することだと思います。それは効率が悪いように感じますが、8900万行で setFirstResult を呼び出すと、途方もなく長い時間がかかり始めます...
更新: setFirstResult/setMaxResults は機能しません。私が恐れていたように、オフセットに到達するのに非常に長い時間がかかることが判明しました。ここに解決策があるはずです!これはかなり標準的な手順ではありませんか?? 私は、Hibernate をやめて、JDBC など必要なものは何でも使用したいと思っています。
更新 2: 私が思いついた解決策は、基本的には次の形式です。
私は他の条件を持っているので、すべてがインデックスにあるとしても、まだ私が望むほど速くはありません...他の提案のためにまだ開いています..
hibernate - Hibernate Criteria group by の結果のカウント - 返されたグループ化されたレコードの合計
次のグループ化を含む条件ベースのクエリがあります。
生成された SQL は次のとおりです (独自仕様のため、クレンジングされています)。
ここで、概念的には、クエリ結果を count(*) でラップして、データベースからデータが返されないようにします。カウントだけです。このような:
不要な行が何千行もある可能性があり、高性能に関心があるため、そのデータがネットワーク経由で送信されることは望ましくありません。
私の基準ベースの検索には、多数の条件があります。現実的に再構築することはできないので、基準に固執する必要があります。
もちろん、rowCount または count("xyz") を追加しても役に立ちません。行ごとに 1 が報告されるだけだからです。
私は現在、カウントを取得するためにこれを行っています:
機能しますが、カウントに戻るのに時間がかかります(問題がある場合はOracleで)。
私が提案していることを実行できますか?
spring - Hibernate のパフォーマンスの問題: ScrollableResults と firstResult/maxResult の比較
タイトルの通り、dbから膨大なデータをSELECTするのにどちらが使いやすいか、ご回答いただけると嬉しいです!
どのケースでどちらを優先するのが最適で、その理由は何ですか?
(PS: 1 対多などのマッピング関係はありません。数百万のデータを含む単一の巨大なテーブルから行を選択するだけです -mysql-)
前もって感謝します。
java - JDBC ResultSet に関するアドバイス
私は Employee テーブルとそのための Entity クラスを持っています。
私のタスクは、結果セット内の従業員テーブルのデータ (タイプ scrollable ) を 2 回必要と
するようなものです。 ->
1: エンティティ クラスのインスタンスを作成し、結果セットを初めて反復処理するときに List に格納します。
または
2: 最初の繰り返しの後、結果セットの first() メソッドを呼び出して最初の行に戻り、データを 2 回目に使用します。
どのオプションが時間とリソースの消費を抑えますか。
より良い提案があれば、提供してください。
ありがとう。
java - ScrollableResults を使用した Hibernate での熱心なフェッチ コレクション
Hibernate を使用して、テーブルから約 1 億行を取得しようとしています。内部に料金のコレクションを含む永続エンティティ Item があります (別の永続エンティティ)。結果を反復処理してすべてのオブジェクトの料金にアクセスすることを考えると、n+1 の問題を回避するために熱心に料金を取得したいと考えています。
また、これを Provider という別のテーブルに結合したいことにも言及する必要があります (1 対 1 のマッピングですが、外部キーはありません)。私は試した:
私の Order クラスには、Provider フィールドと Item フィールドが含まれています。次のエラーが表示されます。
原因: org.hibernate.QueryException: クエリは結合フェッチを指定しましたが、フェッチされた関連付けの所有者が選択リストに存在しませんでした
私はアイテム(熱心に取り出された料金で)とプロバイダーを含む注文のスクロール可能なリストになりたいと思います。
php - PHP PDO MySQL スクロール可能カーソルが機能しない
たとえば、id、value の 2 つのフィールドを持つテーブルがあります。このテーブルにほぼ 10 万行を挿入しました。
スクロール可能なカーソルを使用したい。次のコードを書きました。
私は何を間違っていますか?
hibernate - HQL 経由の Hibernate ScrollableResults では、関連付けごとに左結合フェッチが必要です
うまくいけば、Hibernate の第一人者が助けてくれるでしょう。
次のようなオブジェクト構造があります。
3 つすべてに Hibernate エンティティとして注釈が付けられ、すべての関連付けはデフォルトです (Hibernate 3.2 を使用するため、デフォルトでは遅延する必要があります。
を使用して、この HQL を使用して結果を取得したいと考えていますScrollableResults
。結果セットをストリーミングするために必要な呪文を実行しました。
しかし、「java.sql.SQLException: ストリーミング結果セット com.mysql.jdbc.RowDataDynamic@633f8d4f はまだアクティブです。ストリーミング結果セットが開いていて、特定の接続で使用されている場合、ステートメントは発行されません。さらにクエリを試行する前に、アクティブなストリーミング結果セットに対して .close() を呼び出しました。」
私は SQL クエリのログを記録しています。レポートが前方にスクロールされた後、関連のないプロパティを取得しようとしていることがはっきりとわかります。
そこで、これらのフィールドを含めるように HQL を拡張し始めました。
今は次のように見えます
約 25 の結合があっても、ロードされているフィールドがさらにあり、同じ例外が発生します。手動でグラフを歩き続けることもできますが、これには永遠に時間がかかります。これは必要ではないと思います。Hibernate コードを見るとTwoPhaseLoad
、スクロールによって呼び出され、オブジェクト内のすべてのプロキシと遅延ロードされたフィールドを初期化しようとしているように見えます。これは、スクロールの実行中に他の SQL クエリを実行しないという要件を必然的に破ります。これは誰にとっても意味がありますか?