MySQL 流式讀取 MySQL中流式查詢使用

2021-10-17 16:01:34 字數 1454 閱讀 6153

mysql中流式查詢使用

瀏覽次數:766

, 標籤:

mysql

一、前言

mysql 是目前使用比較廣泛的關係型資料庫,而從資料庫裡面根據條件查詢資料到記憶體的情況想必大家在日常專案實踐中都有使用。

當指定條件的資料量特別大時候一般是通過分頁的方式在前端頁面通過 tag 標籤一頁頁的載入資料到記憶體;但是有些情況下卻不需要使用者切換 tag

標籤的方式一頁頁的載入資料,這時候如果一下子全部把資料載入記憶體,就有可能會導致

oom,雖然這時候可以通過程式控制分頁查詢,但是每次查詢時候資料庫都需要把所有符合條件的資料查詢出來然後根據當前頁的返回來返回指定的頁,這無疑加重了

mysql 伺服器不必要的開銷。

其實在 mysql 中提供了流式查詢,這允許把符合條件的資料一部分一部分的載入到記憶體,本 chat 就來具體講解如何在 mysql中使用流式查詢:

* 使用流式查詢前,我們是如何在 mysql 中進行查詢資料的,整個過程發生了什麼?

* 如何使用 jdbc 程式設計方式在 mysql 中使用流式查詢?

二、普通查詢

- 當我們在jvm程序裡面的某乙個執行緒裡面執行資料庫查詢時候,其實這個請求首先會呼叫mysql驅動程式。

- mysql驅動接受到請求後會向mysql伺服器發起tcp請求,伺服器端根據條件查詢出匹配的資料,然後通過tcp鏈結傳送到mysql驅動

- mysql驅動內則會把符合條件的資料快取到驅動內,等伺服器返回了所有符合條件的資料後,在一下子把快取裡面的資料返回給呼叫sql的應用程式。

所以如果查詢的資料量特別大,那麼mysql驅動內快取就可能把記憶體撐爆造成oom。

三、jdbc程式設計中mysql流式查詢

mysql客戶端流式查詢不會一下子把伺服器端所有資料快取起來,而是一部分一部分的把伺服器端返回的資料返回給應用程式層,所以可以有效避免oom。

jdbc程式設計中mysql流式查詢例子:

public void selectdata(string sqlcmd,) throws sqlexception catch (sqlexception e) } } catch (sqlexception

e) } finally }

可知只是preparestatement時候改變了引數為resultset.type_forward_only,

resultset.concur_read_only,並且設定了preparedstatement的fetchsize為integer.min_value。

四、最後

上面我們講解了jdbc中流式查詢使用,那麼如下在mybatis中使用那?

- 如何在 mybatis 中使用 mybatiscursoritemreader 進行流式查詢?

- 如何在 mybatis 中使用 resulthandler 進行流式查詢?

- 什麼是客戶端流式查詢和伺服器端流式查詢?

更多流式查詢請單擊 單擊我

mybatis 流式讀取大量MySQL資料

jdbc從資料庫獲取資料的三種讀取方式 1.一次全部 預設 一次獲取全部。2.流式 多次獲取,一次一行。3.游標 多次獲取,一次多行。mybatis沒有任何配置的話是採取第一種方式 當資料量比較大的時候 容易引發oom 現在介紹第二種 流式獲取資料 示例 還需要繼承resulthandler 實現類...

mysql 流式查詢 mysql資料庫流式查詢

mysql資料庫流式查詢 瀏覽次數 541 標籤 mysql 1.為什麼使用流式查詢?普通查詢方式 1 jvm程序內資料庫執行緒池,某一線程執行查詢時,呼叫mysql驅動程式。2 mysql驅動向mysql伺服器發起tcp請求,伺服器端根據條件查詢匹配的資料,然後通過tcp鏈結傳送到mysql驅動。...

流式檔案讀取

流式檔案讀取適用於一些比較大的檔案,可以分多次將檔案讀取到記憶體中 rs.pipe 將可讀流中的內容直接輸出到可寫流中 var fs require fs 建立乙個可讀流 var rs fs.createreadstream c users believer pictures s ed pictur...