日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

server多笔记录拼接字符串 sql_Java拼接“1亿行字符串”你会遇到什么问题?

發布時間:2024/4/14 java 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 server多笔记录拼接字符串 sql_Java拼接“1亿行字符串”你会遇到什么问题? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

拼接“1億行字符串”你會遇到什么問題?

本文將涉及到的三方面的內容,如下:

1,一個10萬次的for循環,4種實現的性能對比

2,直接將For循環改為1億次,遇到的問題

3,拓展

00. 需求

原計劃是生成1億條模擬數據,詳細的需求如下:

創建1億條Insert SQL語句,例如:INSERT INTO products (`id`,`code`) value (1, '000000000');其中,id 類型為INT(11)code 類型為VARCHAR(9),值區間00000000-99999999,長度不足9位的在前面補充0使其長度滿足9位。

01. 一個10萬次的for循環,4種實現的性能對比

最終目的是1億,但是會涉及到時間消耗問題,所以計劃先從10萬行數據開始查看一下實現方式上的效率對別。決定使用方式之后將數據量升級到1億行最終實現需求。

選擇了日常代碼中經常見到的4種方式實現方式:

1, 使用 “+” 來拼接字符串; 2,使用StringBuffer | StringBuilder來拼接字符串; 3,使用String.formate() 來格式化字符串,并用 “+” 拼接字符串; 4,使用String.formate() 來格式化字符串,并用 StringBuffer | StringBuilder 拼接字符串;

在10萬數據時候當前場景它們各自的執行效率如何呢,下面是統計后的對比

代碼結構如下:

對代碼感興趣同學可以看 這里;

整體性能的對比結果很顯然:

StringBuilder > "+"拼接 > String.formate()

使用 “+” 拼接字符串,雖然底層的實現使用StringBuilder做了優化,并不是直接用 “+” 拼接 直接代替StringBuilder那么簡單。

一次 “+”字符串拼接,相當于執行

new StringBuilder(str).append(newStr).toString();

例如:

String name = "P" + "a" + "g" + "e";

相當于

String name = new StringBuilder(new StringBuilder(new StringBuilder("P").append("a").toString()).append("g").toString()).append("e").toString();

使用上面的方法測試不同數量級的運行時間得到如下參考數據:

整個過程中會多次創建新的對象,并頻繁調用toString()方法,最終導致了其性能的下降。

通過上面的結果我們可以得到如下結果:

1,在上面需求的復雜度的情況下,小于1000條數據時,選擇哪種實現均可,可以優先考慮可讀性,所以可以優先考慮String.formate();2,在上面需求的復雜度的情況下,大于1000條數據時,優先考慮StringBuilder或String.formate()。String.formate()通常能夠帶來更好的可讀性,但是如果性能上造成了很大的困擾時,請考慮使用StringBuilder;3,如果場景不是足夠簡單,盡量避免使用“+”拼接字符串,因為它既沒有帶來很好的可讀性,也沒帶來很好的性能。

02. 目標1個億

上面數據量只到了100,000(即:10萬)條,而我們的目標是100,000,000(即:1億)條。

通過100條 - 10萬條數據的過程,我們字符串拼接的性能并不是線程增長的,在10W的時候:

(1)“+”已經達到38s,一次可以推斷 1億條記錄至少 38s x 1000 ≈ 10.5h。 (2)StringBuilder只用了43ms,所以它可能帶給我們驚喜。 (3)String.formate + StringBuilder消耗了532ms,1億條記錄至少 0.532s x 1000 ≈ 532s(9分多鐘)

所以直接使用方案2來StringBuffer生成SQL語句是個好選擇,直接將循環測試設為為1億次。

當將循環次數設定為循環1億次時,卻出了出了問題。

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space

JVM可以通過-Xms和-Xmx來設定堆內存。在經過幾次測試之后得到如下參考數據:

很顯然一臺內存是16GB的MacBook Pro是無法滿足直接在內存中創建1億行Insert SQL語句的。那么如何完成上述需求?

既然無法通過1個1一次的For循環來生成,那么可以通過多個多次的For循環,比如執行10次1千萬的For循環。

按照上面的思路,執行了兩次操作: 1,執行10次,每次生成1000萬行數據,并將生成數據持久化的同一個文件。 2,執行10次,每次生成1000萬行數據,并將生成數據持久化的一個獨立的文件。 3,執行100次,每次生成100萬行數據,并將生成數據持久化的一個獨立的文件。

執行結果如下:

到此為止需求實現。


03. 拓展

1,如果一開始選擇實現方式是每生成一條SQL就append到文件中,那么上面的部分問題你不會遇到。

2,在生成測試數據時,如果數據比1億條更大,那么需要注意StringBuilder內部有一個capacity,capacity的類型為int,因此存在最大capacity的限制,另外

3,StringBuilder內部會有byte[]實現,處理大數據量是還需要關注數組越界的問題。

4,最終生成的文件大小可以在實際應用中需要進行判斷,使用何種體積的文件,建議使用每個文件100萬行數據體積64.9MB的文件,因為打開這個體積的文本文件速度較快(無論是通過Vim還是文本工具)。

5,在處理的大量數據時,除了關注可讀性可讀性,同時還需要關注效率以及,需要時還需要關注JVM參數設置。

總結

以上是生活随笔為你收集整理的server多笔记录拼接字符串 sql_Java拼接“1亿行字符串”你会遇到什么问题?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产又爽又黄的视频 | 亚洲啪av永久无码精品放毛片 | 欧美成人免费一级人片100 | 欧美午夜理伦三级在线观看 | 久草最新| 亚洲久久一区 | 免费av在线播放网址 | 国产精品视频你懂的 | 成人字幕 | 久久久三级视频 | 黄色片在哪看 | 男女插插插视频 | 久久精品7 | 伦理黄色片 | 91爱| 国产成人一区二区三区影院在线 | www.av777| 蜜臀尤物一区二区三区直播 | 天天色影综合网 | 91精产国品一二三区在线观看 | 少妇人禽zoz0伦视频 | 国产日韩欧美久久 | 久热这里只有 | 葵司av电影 | 中文字幕无线精品亚洲乱码一区 | 毛片毛片毛片毛片毛片毛片毛片毛片 | 性一级视频 | 亚洲综合av一区二区三区 | 成人精品综合 | www久久久久久 | 亚洲私人影院 | 精品无码国产污污污在线观看 | 美女搡bbb又爽又猛又黄www | 秋霞电影一区二区 | 国产精品久久久久久久久久久久久久久久久 | 国产高清视频免费 | 免费视频网站在线观看入口 | 日本午夜精品 | 奇米四色在线视频 | 6680新视觉电影免费观看 | 91深夜福利 | 欧美日韩一区二区三区视频 | 国产成人黄色 | 免费看欧美一级特黄a大片 国产免费的av | 诱夫1v1高h | 97理伦| 亚洲天堂第一区 | 免费在线国产 | 丁香六月久久 | 国产精品你懂的 | 欧美日韩一区二区三区电影 | 农村少妇无套内谢粗又长 | 91在线视频国产 | 色就是色综合 | 欧美日本在线看 | 精品乱码一区二区三区 | 黄网免费在线观看 | 国产一区二区三区在线观看免费 | 黄色一级免费看 | 福利影院在线 | 美女啪啪免费视频 | 成人高清免费 | 成人久久精品人妻一区二区三区 | 摸摸大奶子 | 精品九九视频 | 草草影院国产第一页 | 免费成人黄色 | 日本欧美韩国国产精品 | 狠狠爱婷婷| 亚洲精品二| 日韩精品视频免费在线观看 | 日本视频www色 | 久久久久亚洲国产 | 日韩激情视频在线观看 | 国产午夜精品免费一区二区三区视频 | 99re6在线精品视频免费播放 | jizz网站 | 美国式禁忌1980 | 日本a级大片 | 亚洲av无码国产精品麻豆天美 | x88av视频 | 久热在线视频 | 生活片一级片 | a级片网址 | 成人视品 | 变态另类一区 | 伊人久久亚洲综合 | 日本高清免费aaaaa大片视频 | 国产资源精品 | 亚洲国产精品视频一区二区 | 国产色一区二区 | 毛片123| 亚洲不卡免费视频 | 日本三级视频在线 | 国产精品成人aaaaa网站 | 日本www免费 | 美女激情av| 国产影视一区二区三区 | 免费网站在线观看视频 |