久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

Oracle和MySQL的JDBC到底有多慢

134次閱讀
沒有評論

共計 1840 個字符,預計需要花費 5 分鐘才能閱讀完成。

本篇文章為大家展示了 Oracle 和 MySQL 的 JDBC 到底有多慢,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

經常聽人說,數據庫的 IO 性能不佳,但說歸說,并沒有感性認識。我們現在就來實際測試一下,常用的 Oracle 和 MySQL 的 JDBC 讀取性能如何。

之所以測試 JDBC,是因為大部分應用是 JAVA 寫的,也就只能用 JDBC 來訪問數據。這里僅測試用 JDBC 讀出數據,并產生成 Java 的記錄對象(畢竟到了這一步才能在應用中使用),不作任何計算。

1. 數據來源

使用 TPCH 生成的數據,選用其中的 customer 表來做測試,數據記錄為 3000 萬行,8 個字段。它生成的原始文本文件名為 customer.tbl,文件大小為 4.9G。利用數據庫提供的數據導入工具將此文件數據導入到 Oracle 和 MySQL 的數據表中。

2. 測試環境

在一臺 Intel 服務器上完成測試,2 個 Intel2670 CPU,主頻 2.6G,共 16 核,內存 64G。數據庫表數據及文本文件均存儲在同一塊 SSD 硬盤上。

所有測試均在服務器本機上完成,沒有消耗網絡傳輸時間。

3. 數據庫讀數測試

通過 Oracle 提供的 JDBC 接口,用 SQL 語句執行數據讀取。

Java 寫起來麻煩,用 SPL 腳本執行測試:

MySQL 的測試代碼類似,不再贅述。

測試結果(時間單位:秒)

第二次可能由于操作系統有了硬盤緩存,所以更快。因為我們主要是為了測試 JDBC 的讀取時間,所以就以第二次為準,減少數據庫本身從硬盤讀數的影響。每秒讀出行數也是按第二次時間來計算的,也就是說,Oracle 每秒能讀出 10 萬行多數據,MySQL 大概接近 8 萬行。當然這個值和表的字段數及類型都有關(customer 表有 8 個字段),只是一種參考。

4. 文本文件對比

只從上面的數據量還沒有太多感性認識,我們再讀一下文本文件來對比。辦法是一樣的,從文件中讀出數據,并解析出記錄,不作任何計算。

編寫如下 SPL 腳本執行測試:

測試結果是 42 秒!

這意味著,讀取文本要比讀取 Oracle 快 281/42=6.69 倍,比 MySQL 要快 381/42=9.07 倍!

我們知道,文本解析是個非常麻煩的事情,但即使這樣,從文本文件讀取數據還是遠遠快于從數據庫中讀數。Oracle 和 MySQL 的 IO 實在是太慢了!

5. 二進制方式

我們進一步再看使用二進制方式的存儲格式的讀取性能,并和文本比對。

為了對比明顯,這次換一個更大的表,用 TPCH 中的 orders 表,有 3 億行數據,9 個字段。

文本讀取的代碼和上面類似,讀取時間測試為 438 秒。

然后,我們將這個文本文件轉換成 SPL 組表,再寫代碼測試:

測試結果是 164 秒,大概僅僅是文本讀取的三分之一。

這是情理之中的事情,因為二進制數據不再需要解析,可以直接產生對象,計算量少了很多,因而要更快。

需要說明的是,組表文件雖然采用列存格式,但在這里讀出了所有列,并沒有比文本少取任何內容,沒有占列存的便宜。事實上,因為讀所有列,使用列存還會吃點虧,如果采用 SPL 集文件(一種行存格式)還會更快。

6. 并行提速

從文件中取數還很容易實現并行,文本和組表都容易寫出并行程序。還是用上面的 orders 表為例來測試,使用 4 線程取數。

文本取數代碼:

組表取數代碼:

用 SPL 很容易實現數據分段和并行計算。

測試結果為:

文本 119 秒

組表 43 秒

與串行相比,接近了線性提升,將 CPU 的多核充分利用起來了。

數據庫中的數據則不容易簡單地實施分段并行,需要用 WHERE 條件去拼,結果很難說清到底是并行不力還是 WHERE 執行損失太多,測試結果的參考意義就打折扣了,這里就不再做了。

7. 結論

數據庫(Oracle 和 MySQL)的 JDBC 性能非常非常差!比文本文件還要差 5 倍以上。而采用二進制數據時,會比文本再提高 3 倍的讀取性能。也就是說,合理格式的二進制文件會比數據庫有 15 倍以上的優勢。再考慮到并行因素,比數據庫快出幾十上百倍也是完全可能的。

在關注性能且數據量較大時,千萬不要把數據讀出數據庫計算!

如果實在需要讀出后再計算(有時 SQL 很難寫出復雜的過程計算),就不要再用數據庫存儲了(大數據都是歷史,基本也不再改了,可以事先讀出),用文本都比數據庫強,用二進制當然更好(推薦使用 SPL 組表,哈哈)。切不要把時間浪費在讀數這種非計算任務上了。

上述內容就是 Oracle 和 MySQL 的 JDBC 到底有多慢,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注丸趣 TV 行業資訊頻道。

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-07-17發表,共計1840字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 伊金霍洛旗| 青铜峡市| 潼南县| 万源市| 渭南市| 金坛市| 抚顺县| 柳州市| 玛纳斯县| 敖汉旗| 德令哈市| 田林县| 尚义县| 鹿邑县| 石泉县| 慈溪市| 宣恩县| 紫阳县| 黑河市| 泉州市| 临邑县| 那坡县| 沂水县| 赣州市| 界首市| 福建省| 上虞市| 威海市| 胶南市| 灵石县| 若羌县| 砚山县| 涟源市| 建瓯市| 阿勒泰市| 肥城市| 宝鸡市| 延津县| 罗甸县| 漠河县| 临泽县|