設計一個數據庫存儲模式時,要仔細分析數據模式,不要把所有的數據都放在一起。否則對系統的可用性,高效能,擴展性都會有嚴重的影響。當然你設計的系統非常小,完全可以用最簡單的方法。
要通過對業務的熟練,從不同的角度對數據進行多維度分析,一般可以從如下幾個方向分析:
1. 數據流向
2. 數據訪問特點
3. 數據量的大小
4. 數據的增長量
5. 數據的生命週期
根據以上數據特點,綜合數據模式對數據表進行分類:
1. 恆數表
2. 遞增表
3. 流水錶
4. 狀態表
5. 核心表
6. 過程表
在我們進行大數據量系統的模型設計時,根據不同的數據表,必須要遵循這幾個要點。
核心表:
核心表是系統訪問最頻繁的,在設計時要考慮訪問的代價,一定要遵循範式,注意字段的個數和字段長度,注意範圍查詢。如果核心表的數據量很大的話,要根據分區表或表路由等方式進行數據歸檔,以保證核心表的性能。
過程表:
過程表顧名思義是用來記錄某一過程的,一般指數據的生命週期;在設計過程表時要設計一個明顯代表數據生命週期的字段,對於數據倉庫系統更是要合理的利用生命週期字段,可以高效的統計不同生命週期的數據;在設計表時也要考慮增刪改的代價,插入的代價最小,修改需要檢索數據保留修改字段值,刪除要保留整條記錄,代價最爲昂貴。
恆數表:
恆數表幾乎很少變化,類似我們使用字典表,在設計這樣的表時,要設計好表的參數,較小的表就不建議建立索引。
遞增表:
遞增表的增長是很快的,並不是所有的數據都是常用的,所以分區的大小要儘量均衡,嚴格區分核心數據和過程數據,索引的鍵值選擇性儘量高,謹慎使用複合索引,按照關聯關係設計合適的分區和索引。
流水錶:
流水錶類似記錄log,記錄些流水信息,流水錶數據量一般都很大,信息幾乎沒有變更。在設計時要注意分區的粒度和選擇,一般不建議建立太多的索引。
狀態表:
狀態表一般指記錄某一行爲的狀態過程,生命週期很短,很容易和過程表混淆。可以簡單區別它們,狀態表是動作行爲的軌跡;過程表是數據的生命週期。