百億數據毫秒響應級交易系統讀寫分離存儲數據設計

剛完成了一個存儲百億級數據,響應時間要求10毫秒內的交易系統數據存儲設計方案,如今有空整理一下思惟。oracle

1、分庫分表fetch

1.實時數據和歷史數據分離設計

分爲ABC表,AB表每日日切,只存儲1天數據,每到24點切另外1張表。C表存儲歷史數據,T-1數據日終批量AB表遷移至C表索引

這樣實現動態數據和靜態數據之間的分離。hash

2.數據離散先垂直劃分、再水平劃分方法

(1)垂直劃分第一層  根據業務相互之間的數據隔離,分開不一樣用途的表(使用不一樣的表名X)。技術

(2)垂直劃分第二層   根據業務的實體進行劃分(咱們這裏爲商戶,某些大商戶獨佔一個實體序號Y)統計

(3)水平劃分第一層    對於交易量大的實體根據流水號進行水平離散(離散序號Z)數據

所以一個表名由此構成: A/B/C_X_Y_Z查詢

2、實時交易

對於高tps的交易,保證足夠的離散數量,3000萬/日的交易量,水平離散數量要到48以上。

對於凌晨數據遷移的批量,涉及查找日期爲T-1日期的歷史數據,需根據遷移狀態表進行判斷,若是正在遷移,須要拒絕交易,不然容許查詢。

3、歷史數據遷移

使用存儲過程,提供2種方法,對於交易量大的表,使用oracle分區交換技術,其它使用fetch bulk批量提交方法遷移數據。

注意:分區交易交換時,不只要注意全局索引、分區索引失效的問題,還要考慮統計信息的問題。

1.分區交換的技術細節以下:

(1)將普通表統計信息export到1箇中間的表

(2)檢查須要交換的分區是否存在,數據是否爲空,若是非空,拒絕

(3)分區交換

(4)檢查分區表全局索引和本地索引是否失效,若是失效,重建索引

(5)檢查普通表索引是否失效,若是失效,重建索引

(6)從中間表導統計信息到普通表

(7)對普通表鎖定統計信息

2.普通fetch bulk批量提交數據遷移數據的技術細節以下:

(1)使用fetch bulk從普通表插入數據到分區表

(2)強制對普通表進行統計信息收集

(3)批量刪除或者truncate普通表

(4)對普通表鎖定統計信息

3、擴容

1.每筆流水數據都在聯機交易時存儲交易特徵計算出來並取mod 4800的hash值。

例如離散了 48張表,將這個mod 4800的值 再mod48,(數值爲0,48,96,144)爲0表,(1,49,97,145)爲1表。

如今要擴充成96張表,mod 96,(數值爲0,96)爲0表,(1,97)爲1表,須要把原表0中數值爲48的數據遷移至48表,49的數據遷移至49表。

雖然麻煩,可是能夠基本能夠實現不停機擴容。

相關文章
相關標籤/搜索