大多數資深開發人員一定都經歷過資料庫 I/O 效能相當低的情況。但很多人可能沒有意識到 I/O 操作有多慢,特別是資料庫 I/O 速度與其他資料讀寫方法的速度之間的差距。
Java 是一種用於應用程式開發的常用技術。現在我們進行現場測試,看看Java中從Oracle和MySQL這兩種典型資料庫中檢索資料的效能,並與從文字檔案中檢索資料的效能進行比較。
詳細點選標題
結果:
- 我們發現當使用SQL對上述資料表進行基於遍歷的聚合操作並返回非常小的結果集時,資料庫速度很快,比我們基於文字檔案執行相同操作時快得多。這意味著遍歷資料庫中的資料表一點也不慢,或者可以說該資料儲存格式具有相當不錯的效能。
- 障礙在於DBC 驅動程式非常慢。我們甚至懷疑這是一種有意的設計,它期望甚至強制資料不是從資料庫中檢索而是在資料庫內部計算。
啟示:
- 當我們想要實現大資料計算的高效能時,從資料庫中臨時檢索資料是不可行的,最好在資料庫內部進行計算。
- 如果必須先從資料庫中取出資料才能真正處理計算,我們最好不要將資料儲存在資料庫中。
如果資料仍然儲存在資料庫中,那麼無論我們在資料庫外使用什麼高效能演算法,大多數情況下效能都不會令人滿意;除非涉及的資料量非常小。
當資料庫是唯一資料來源時,有什麼辦法可以提高計算速度嗎?
如果問題僅在於驅動程式速度慢,即速度慢不是由於資料庫負載過重,我們可以使用並行處理來改善這種情況。
當並行執行緒數較少(一般<10)時,計算效率幾乎呈線性上升。這意味著當有n個檢索執行緒時,檢索速度幾乎快了n倍。測試結果是,6執行緒並行處理速度提升達5倍。
在測試中,4個執行緒使文字檔案檢索速度提高了3.6倍,複合表資料檢索速度提高了3.8倍。