來自支付寶資深數據庫架構師童家旺給你們分享的關於數據存儲性能優化的一點想法,他從本身的我的經驗中總結了關於數據庫存儲的性能優化。 算法
▲支付寶資深數據庫架構師童家旺 數據庫
首先,童家旺介紹了他認爲的什麼是優化: 後端
第1、作任何事情最快的方法就是什麼也不作。 緩存
第2、不訪問沒必要要的數據:使用B*Tree/hash等方法定位必要的數據。使用column Store或分表的方式將數據分開存儲。使用Bloom filter算法排除空值查詢。 性能優化
第3、合理的利用硬件來提高訪問效率:使用緩存消除對數據的重複訪問。使用批量處理來減小磁盤的Seek操做。使用批量處理來減小網絡的Round Trip。使用SSD來提高磁盤訪問效率。 網絡
響應時間和吞吐量之間的關係 架構
一、性能。衡量完成特定任務的速度或效率。 工具
二、響應時間。衡量系統與用戶交互式多久可以發出響應。 性能
三、吞吐量。衡量系統在單位時間裏能夠完成的任務量。 優化
▲反應時間
▲傳統磁盤的訪問特性
B*Tree優化數據訪問介紹
▲B*Tree優化數據訪問
B*Tree優化數據訪問模擬場景
▲B*Tree優化數據訪問模擬場景
童家旺經過阿里巴巴的真實應用場景介紹瞭如何用分表存儲來提升性能。
1、場景介紹:
2、要求:
3、性能分析
一、每塊記錄數
8192 * 0.80(1) / 250 = 25.5 (主表)
8192 * 0.80 / 2000 = 3.27(詳情表)
8192 * 0.80 / ( 2000 + 250 ) = 2.91
二、訪問的邏輯IO(內存塊訪問)
List的查詢代價
改進後=( 300/25.5 ) * y + 4 + x = 4 + x + 11.8y = 4(2) + 7(3) + 11.8 * 1.5(4) = 28.7
改進前=( 300/2.91 ) * y + 4 + x = 4 + x + 103.y = 4 + 7 + 103 * 1.5 = 165.5
三、訪問涉及到的物理讀(磁盤塊訪問)
List的查詢代價(邏輯IO * ( 1 – 命中率 ))
改進後=28.7 * ( 1 – 0.85(5)) = 4.305
改進前=165.5 * ( 1 – 0.85 ) = 24.825
四、訪問時間(ms)
改進前=邏輯IO時間+物理IO時間= 28.7 * 0.01(6) + 4.305 * 7(7) = 30.422ms
改進後=邏輯IO時間+物理IO時間= 165.5 * 0.01 + 24.825 * 7 = 175.43ms
場景
要求
方案
注意事項
參考緩存工具
MemCached, Tair, Redis
【編輯推薦】