mysql資料庫流式查詢
瀏覽次數:541
, 標籤:
mysql
1.為什麼使用流式查詢?
普通查詢方式:
1)jvm程序內資料庫執行緒池,某一線程執行查詢時,呼叫mysql驅動程式。
2)mysql驅動向mysql伺服器發起tcp請求,伺服器端根據條件查詢匹配的資料,然後通過tcp鏈結傳送到mysql驅動。
3)mysql驅動把符合條件的資料快取到驅動記憶體中,待資料傳送結束,返回給應用程式快取資料。
所以,mysql驅動記憶體就可能在訪問大量資料(使用場景)時發生oom。
2.jdbc程式設計中mysql流式查詢
為了有效避免oom,mysql客戶端流式查詢不會同時把伺服器端的所有符合條件的資料快取起來,而是一部分一部分的把伺服器端返回的資料返回給應用程式層。
**示例:
public void selectdata(string sqlcmd,) throws sqlexception catch (sqlexception e) catch (sqlexception e) finally {
close(stmt, rs, conn);
3.mybatis 中使用流式查詢
①.mybatiscursoritemreader
1)配置檔案:注入mybatiscursoritemreader
class="org.mybatis.spring.batch.mybatiscursoritemreader">
3) **使用:
map param = new hashmap();
param.put("oredcriteria", example.getoredcriteria());
// 設定引數
mymybatiscursoritemreader.setparametervalues(param);
// 建立游標
mymybatiscursoritemreader.open(new executioncontext());
//使用游標迭代獲取每個記錄
long count = 0l;
bean bean;
while ((bean = mymybatiscursoritemreader.read()) != null) {
system.out.println(json.tojsonstring(bean));
++count;
②.resulthandler
2)**使用
sqlsession session = sqlsessionfactory.opensession();
session.select("selectbyexample", example, new resulthandler() {
@override
public void handleresult(resultcontext resultcontext) {
bean bean = (bean) resultcontext.getresultobject();
system.out.println(resultcontext.getresultcount());
system.out.println(json.tojsonstring(bean));
ps:參考:
2.
MySQL 流式讀取 MySQL中流式查詢使用
mysql中流式查詢使用 瀏覽次數 766 標籤 mysql 一 前言 mysql 是目前使用比較廣泛的關係型資料庫,而從資料庫裡面根據條件查詢資料到記憶體的情況想必大家在日常專案實踐中都有使用。當指定條件的資料量特別大時候一般是通過分頁的方式在前端頁面通過 tag 標籤一頁頁的載入資料到記憶體 但...
MySQL中流式查詢使用
mysql 是目前使用比較廣泛的關係型資料庫,而從資料庫裡面根據條件查詢資料到記憶體的情況想必大家在日常專案實踐中都有使用。當指定條件的資料量特別大時候一般是通過分頁的方式在前端頁面通過 tag 標籤一頁頁的載入資料到記憶體 但是有些情況下卻不需要使用者切換 tag 標籤的方式一頁頁的載入資料,這時...
MySQL如何查詢LINESTRING資料
我有乙個提交的命名crm geo org,具有以下結構 ipoid integer 11not null primary key beginip integer 14not null unsigned endip integer 14not null unsigned org varchar 255...