1. 程式人生 > >資料庫策略(單機、叢集)

資料庫策略(單機、叢集)

一、單機資料庫策略

      硬體資源相對於使用者的體驗是成本比較高的;資料庫的硬碟儲存空間非常珍貴

      滿足正規化的設計原則:

             三正規化:

                   1、所有的資料庫儲存的列必須是原子級,不可分割(只要是關係型資料庫自動滿足第一正規化)

                        

                   2、基於第一正規化當前基礎

                         必須有主鍵

                         所有非主鍵必須依賴全部主鍵內容,不能部分依賴

                         

                   3、第二正規化的一種子集

                         所有的非主鍵欄位必須全部依賴主鍵,不能依賴其他非主鍵欄位

                         

             三正規化的設計目的:

                    表格的資料絕對不會出現第二次相同內容欄位;

                    最大程度的節省磁碟空間,但是一旦查詢實惠消耗查詢資源,

                    三正規化可以:最大程度的利用時間換取空間;

             反正規化:違反三正規化(最大程度利用空間換時間),符合當前使用者體驗為目標的目的。

      索引

             索引的優化,資料庫具有索引的資料結構,可以根據不同的情況,不同的查詢條件等等因素,

             對索引進行鍼對性的修改完成優化

             索引:按照一定規則的資料結構設計,實現在儲存在空間的一批介質,

                        這些東西可以提高尋找的目標的速度;

                        在資料中,按照一定規則(排序)的資料結構設計,實現儲存在磁碟上的一批索引檔案

                        這些檔案可以實現快速定位(減少了磁碟I/O次數)目標資料。

             mysql的索引結構B+tree的資料結構

                   查詞典(索引優化過程)

                   查"王"字

                   決定使用拼音法(確定索引的具體使用結構)

  • 在拼音法所在的頁面尋找"W"------肉眼做了掃描-->相當於磁碟一次I/O讀寫
  • 找wang拼音------肉眼掃描一次-->磁碟I/O讀寫一次
  • 找"王"這個字------肉眼掃描一次-->磁碟I/O讀寫一次
  • 根據"王"字指向的頁數158---手動翻頁-->指標跳轉
  • 看到了王字的解釋------肉眼又掃描一次-->磁碟I/O讀寫一次,獲取資料資訊

                   B+tree:資料結構的一種,還有如(B-tree,紅黑樹,二叉樹)

                         

                   磁碟空間記錄的是主鍵id(int + auto_increment)

                   排序是每個磁碟塊記錄資料,和整體資料的特點;

                   三階-四階-五階隨著資料量的增加,B+tree這個樹可以變得越來越寬,越來越高

                   I/O次數 永遠和階數m相關

 

                   磁碟中儲存的不僅可以是主鍵,也可以是字串,組合的各種欄位資料;

                   索引的優化,根據查詢條件的變化,對索引結構中的使用資料進行調整的過程;

 

二、資料庫叢集策略

      單機資料庫最終無論如何設計,都會被物理瓶頸限制,到時候讀寫速度無法滿足要求;

      必須引入分散式的高可用的資料庫叢集;

            

            分散式高可用的叢集策略,基礎是主從資料備份;

      搭建mysql的主從複製(資料庫版本:Percona版本的5.6mysql)

            mysql也支援一主多從,多級主從(一主一從結構)

            原理:

                   

                  Master-slave結構的主從關係,一旦搭建

                  主節點:開啟一個binary.log的二進位制日誌檔案,一旦開啟,所有的節點客戶端的寫操作都會記錄在二進位制檔案中,

                             並且每次的更新都使用Position的資料儲存(第一次update,position 588,insert position 698).

                  從節點:開啟2個執行緒一個日誌,I/O執行緒,sql執行緒,和中繼日誌

                  I/O執行緒:登入主節點監聽二進位制日誌,根據position的值判斷是否有新的寫操作;

                              獲取的所有內容都會寫入本地一箇中繼日誌,由sql執行緒監聽中繼日誌,

                              實現啟動本地客戶端更新資料保持和主節點資料同步;