2

Javaから読み取りSQL RDBMS、結果をユーザーに返すために使用しています。問題は、データベース テーブルに が155 Million rows含まれているため、待ち時間が非常に長くなることです。

データベースから取得した結果を取得し、それらを段階的に (バッチで) ユーザーに提示できるかどうかを知りたかったのです。

私のクエリは単純SELECT * FROM Table_Name queryです。

SELECTクエリが完了するまで、バッチで DB レコードのコールバックを提供できるメカニズムまたはテクノロジはありますか?

使用される RDBMS は MS SQL Server 2008 です。

前もって感謝します。

4

3 に答える 3

1

メソッドStatement#setFetchSizeStatement#getMoreResultsは、データベースからの増分フェッチを管理できるようにすることになっています。残念ながら、これはインターフェイスの仕様であり、ベンダーはこれらを実装している場合と実装していない場合があります。フェッチ中のメモリ管理は、実際にはベンダーに委ねられています (そのため、「JDBC はこのように機能する」と厳密には言いません)。

Statement に関する JDBC ドキュメントから:

setFetchSize(整数行)

この Statement によって生成された ResultSet オブジェクトにさらに行が必要な場合に、データベースからフェッチする必要がある行数に関するヒントを JDBC ドライバーに提供します。

getMoreResults()

この Statement オブジェクトの次の結果に移動し、それが ResultSet オブジェクトの場合は true を返し、メソッド getResultSet で取得された現在の ResultSet オブジェクトを暗黙的に閉じます。

getMoreResults(現在の整数)

この Statement オブジェクトの次の結果に移動し、指定されたフラグで指定された指示に従って現在の ResultSet オブジェクトを処理し、次の結果が ResultSet オブジェクトの場合は true を返します。 現在のパラメーターは、現在の ResultSet を保持するか閉じるかを示します。

また、このSO 応答は、SQLServer 2005 に関するの使用と、setFetchSizeバッチ フェッチを管理していないように見える方法について回答しています。2008 ドライバーを使用してこれをテストすることをお勧めします。さらに、jTDS ドライバーを使用することをお勧めします (コメントで高評価を得ています)。

同じ SO 投稿に対するこの応答も、MSDN の SQLServer ドライバー設定へのリンクが含まれているため、役立つ場合があります。

MS technet の Web サイトにもいくつかの良い情報がありますが、SQLServer 2005 に関連する情報が多くあります。私の大雑把なレビューでは 2008 の特定のバージョンが見つかりませんでした。とにかく、以下を使用してステートメントを作成することをお勧めします。

com.microsoft.sqlserver.jdbc.SQLServerResultSet.TYPE_SS_SERVER_CURSOR_FORWARD_ONLY (2004) 順方向専用、読み取り専用アクセスのスクロール機能、および setFetchSize メソッドを使用してパフォーマンスを調整する

于 2013-05-24T09:01:43.607 に答える