大數據時代,互聯網中每天數以億計的數據在產生和流轉。那麼,有用的數據如何被保存下來?如何用於歸納總結?如何用於支撐生產?這就需要大數據存儲空間---數據庫來完成。
數據庫是應用系統中非常重要的一個組成部分,數據庫的性能是否高效直接影響到應用系統的性能。在數字化時代,客戶對應用系統的交互速度、整體性能的要求越來越高,這就對數據庫整體設計提出較高的要求。
所以,數據庫設計必須遵循一定的規則,良好的數據庫設計與其系統應用設計是相輔相成的。好的數據庫設計能夠合理利用數據的存儲空間、保證數據的完整性、減少數據冗餘、方便進行數據庫應用系統的開發、以及提高系統的使用性能。
大數據時代的數據庫需要滿足以下要求:
1.支持高併發
根據實際應用的需要,數據庫需要滿足大數據量交互需求,估算使用接口壓力和數據庫併發需求。
2.支持負載均衡
根據實際使用,制定數據庫部署架構與負載均衡策略,制定超過支撐能力的快速擴容機制。
3.實現數據讀寫分享
制定讀寫分離策略,確定寫功能節點和讀功能結點,設計讀寫功能的切換流程,保證數據庫功能的正常使用。
4.實現數據庫的高可用
利用大數據集群技術、負載均衡策略和容災計劃,確保數據庫讀寫無故障運行。
綜上所述,數據庫的設計規範是多方面的,其中特別需要注意的有三方面:表設計規範、索引設計規範、SQL語句規範。
一、表設計規範
數據庫表是存放數據的地方,遵循一定規律設計的數據庫表,才能進行快速有效的數據讀取,方便數據管理,提高系統可維護性、可理解性。否則數據存儲就會雜亂無章,存儲和讀取都會非常混亂。
數據庫表主要指標項的要求:
• 命名: 庫名、表名、字段名均小寫,下劃線風格
• 引擎: 存儲引擎儘量使用 InnoDB
• 字符集:使用 utf8mb4 字符集
• 列數: 建議40個以內
• 必要字段:主鍵、添加時間、更新時間
數據庫表設計的注意事項:
• 儘量不使用外鍵,如果有外鍵完整性約束,需要應用程序控制
• 不用保留字,如 DESC、RANGE、MARCH 等
• 把字段定義為 NOT NULL 並且提供默認值
• 如果存儲的字符串長度幾乎相等,使用 CHAR 定長字符串類型
• 在一些場景下,考慮使用 TIMESTAMP 代替 DATETIME
二、索引設計規範
數據庫的索引,是指在一定範圍內對數據進行排序,使之能對檢索應用做出快速響應。索引是影響數據庫應用性能的主要原因之一。
數據庫索引設計細節:
索引數:表的索引數建議不要超過6個
索引類型選擇
• Normal 普通索引
• Unique 唯一索引
• Full Text 全文索引
• SPATIAL 空間索引
索引方法
• BTREE
• HASH (=”,”IN”和”<=>)
索引原則
• 儘量選擇唯一性索引
• 為經常排序、分組、聯合操作的字段建立索引
• 區分度底的類型,不宜建立單獨索引
• VARCHAR 類型,儘量考慮索引長度,不進行全文建索引
• 聯合索引,將區分度更高的字段放在左邊
三、SQL語句規範
使用標準化的SQL語言,使數據庫的針對性操作更容易,並且學習成本是較低的。使用統一的SQL語言,能極大地減輕維護人員的工作量,也能輔助提高開發人員的開發效率,增加代碼的複用性。SQL語句規範設計是數據庫性能主要原因之一,同時也是數據安全使用的基礎。
SQL語句規範細節要求:
減少面向數據庫編程:減少使用自定義函數、存儲函數、用戶變量
• Select * :在查詢中指定所需的列,而不是直接使用“ *”返回所有的列
• ORDER BY:要利用索引的有序性
• JOIN :數據類型必須絕對一致(字段類型、字段長度、字符集、Collection ) 最多五個以內
• Where :
• 索引列是表達式一部分,不能使用索引
• 不要使用屬性隱式轉換
• 應儘量避免在 WHERE 子句中使用 or 作為連接條件,UNION ALL
• 減少使用 % 開頭的模糊查詢,可以最左前綴匹配原則
• 減少 != 、not in 操作符, MySQL只有對以下操作符才使用索引:<,<=,=,>,>=,BETWEEN, IN,以及某些時候的LIKE
數據庫設計是軟件應用系統的根基,必須受到高度重視。培養良好的數據庫設計習慣,是一個合格軟件工程師應該必備的基本素質。