天天看點

大資料時代下的存儲技術---資料庫設計規範

大資料時代,網際網路中每天數以億計的資料在産生和流轉。那麼,有用的資料如何被儲存下來?如何用于歸納總結?如何用于支撐生産?這就需要大資料存儲空間---資料庫來完成。

資料庫是應用系統中非常重要的一個組成部分,資料庫的性能是否高效直接影響到應用系統的性能。在數字化時代,客戶對應用系統的互動速度、整體性能的要求越來越高,這就對資料庫整體設計提出較高的要求。

是以,資料庫設計必須遵循一定的規則,良好的資料庫設計與其系統應用設計是相輔相成的。好的資料庫設計能夠合理利用資料的存儲空間、保證資料的完整性、減少資料備援、友善進行資料庫應用系統的開發、以及提高系統的使用性能。

大資料時代的資料庫需要滿足以下要求:

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

資料庫設計是軟體應用系統的根基,必須受到高度重視。培養良好的資料庫設計習慣,是一個合格軟體工程師應該必備的基本素質。