資料庫策略
單機資料庫策略
• 硬體資源相對使用者的需求體驗是成本比較高的;資料庫的硬碟儲存空間非常珍貴
滿足正規化的設計原則
三正規化
1 所有資料庫儲存的列必須是原子級,不可分割(只要是關係型資料庫自動滿足第一正規化)
2 基於第一正規化當前基礎
必須有主鍵
所有主鍵必須依賴全部主鍵內容,不能部分依賴
3 第二正規化的一種子集
所有的非主鍵欄位必須全部依賴主鍵,不能依賴其他非主鍵欄位
三正規化的設計目的:
表格的資料絕對不會出現第二次相同內容的欄位,最大程度的節省磁碟空間,但是一旦查詢會消耗查詢資源,三正規化可以最大程度的利用時間換取空間
反正規化:違反三正規化(easymall專案中的的資料庫表格單表設計);
最大程度的利用空間換取時間
索引:
• 索引的優化,資料庫具有索引的資料結構,可以根據不同的情況,不同的查詢條件等等因素,對索引進行鍼對性的修改完成優化
索引:按照一定規則的資料結構設計,實現在儲存在空間的一批介質,這些東西可以
提高尋找的目標的速度;
在資料中,按照一定規則(排序)的資料結構設計,實現儲存在磁碟上的一批索引檔案,這些檔案可以實現快速定位(減少了磁碟I/O次數)目標資料;
mysql的索引結構B+tree的資料結構
B+TREE:資料結構的一種,B-tree,紅黑樹,二叉樹.
磁碟空間記錄的是主鍵id(int + auto_increment)
排序是每個磁碟塊記錄資料,和整體資料的特點;
三階-四階-五階隨著資料量的增加,B+tree這個樹可以變得越來越寬,越來越高
I/O次數 永遠和階數m相關
磁碟中儲存的不僅可以是主鍵,也可以是字串,組合的各種欄位資料;
索引的優化,根據查詢條件的變化,對索引結構中的使用資料進行調整的過程;
資料庫叢集策略
單機資料庫最終無論如何設計,都會被物理瓶頸限制,到時讀寫速度無法滿足要求;
必須引入分散式的高可用的資料庫叢集;
分散式高可用的叢集策略,基礎是主從資料備份;
資料庫版本:Perconal版本的5.6mysql
搭建mysql的主從複製
mysql也支援一主多從,多級主從(一主一從結構) 原理如下
Master-slave結構的主從關係,一旦搭建
主節點:開啟一個binary.log的二進位制日誌檔案,一旦開啟,所有的節點客戶端的寫操作都會記錄在二進位制檔案中,並且每次的更新都使用Position的資料儲存(第一次update,position 588,insert position 698).
從節點:開啟2個執行緒一個日誌,I/O執行緒,sql執行緒,和中繼日誌
I/O執行緒:登入主節點監聽二進位制日誌,根據position的值判斷是否有新的寫操作;獲取的所有內容都會寫入本地一箇中繼日誌,由sql執行緒監聽中繼日誌,實現啟動本地客戶端更新資料保持和主節點資料同步;