大資料時代,網際網路中每天數以億計的資料在産生和流轉。那麼,有用的資料如何被儲存下來?如何用于歸納總結?如何用于支撐生産?這就需要大資料存儲空間---資料庫來完成。
資料庫是應用系統中非常重要的一個組成部分,資料庫的性能是否高效直接影響到應用系統的性能。在數字化時代,客戶對應用系統的互動速度、整體性能的要求越來越高,這就對資料庫整體設計提出較高的要求。
是以,資料庫設計必須遵循一定的規則,良好的資料庫設計與其系統應用設計是相輔相成的。好的資料庫設計能夠合理利用資料的存儲空間、保證資料的完整性、減少資料備援、友善進行資料庫應用系統的開發、以及提高系統的使用性能。
大資料時代的資料庫需要滿足以下要求:
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
資料庫設計是軟體應用系統的根基,必須受到高度重視。培養良好的資料庫設計習慣,是一個合格軟體工程師應該必備的基本素質。