MySQL系列學習之簡單介紹MySQL幾種常見存儲引擎

MySQL 常見存儲引擎

1. InnoDB存儲引擎

  • InnoDB存儲引擎支持事務,其設計目標主要面向在線事務處理(OLTP)的應用。其特點是行鎖設計支持外鍵,並支持類似於Oracle的非鎖定讀,即默認讀取操作不會產生鎖,從MySQL5.5.8開始InnoDB存儲引擎是默認的存儲引擎。
  • InnoDB通過使用多版本併發控制(Multi Version Concurrent Control)來獲得高併發性,並且實現了SQL標準的4中隔離級別默認爲 READ REPEATABLE級別,同時使用一種被稱爲next-key locking 的策略來避免幻讀(phantom)現象的產生,除此之外InnoDB存儲引擎還提供了插入緩衝(insert buffer)、二次寫(double write)、自適應哈希索引(adaptive hash index)、預讀(read ahead)等高性能和高可用功能。
  • InnoDB存儲引擎採用了聚集(clustered)的方式(也就是主鍵索引),因此每張表的存儲都是按主鍵的順序進行存放,如果沒有顯式地在表定義式指定主鍵,InnoDB存儲引擎會爲每一行生成一個6字節的ROWID,並以此作爲主鍵。

2. MyISAM存儲引擎

  • MyISAM存儲引擎不支持事務表鎖設計支持全文索引,主要面向一些OLAP數據庫應用。
  • MyISAM存儲引擎的另一個與衆不同的地方就是它的緩衝池只緩存索引文件,而不緩衝數據文件
  • MyISAM存儲引擎表由MYDMYI組成,MYD用來存放數據文件,MYI用來存放索引文件。可以同通過使用myisampack工具來進一步壓縮文件,它使用赫夫曼(Hufffman)編碼靜態算法來壓縮數據,因此使用該工具壓縮後的表示只讀的,也可以使用它解壓數據文件

3.NDB存儲引擎

  • NDB存儲引擎是一個集羣存儲引擎,類似於Oracle的RAC集羣,Oracle RAC的架構是share everything,NDB則是share nothing的集羣架構,因此可以提供更高的可用性,上面大多引用自姜承堯老師的《MySQL技術內幕:InnoDB存儲引擎》這本書對這個更高可用性,姜老師沒有做解釋,我這裏姑且百度,加上自己的理解,做一下解釋,省的有些人看着迷惑,如果解釋的不對,請指教。這裏對這個提供更高的可用性做一個說明,不是說NDB比RAC性能好。
    數據庫構架設計中主要有Shared Everthting、Shared Nothing、和Shared Disk:
    Shared Everthting:一般是針對單個主機,完全透明共享CPU/MEMORY/IO並行處理能力是最差的,典型的代表SQLServer
    Shared Disk各個處理單元使用自己的私有 CPU和Memory共享磁盤系統。典型的代表Oracle Rac, 它是數據共享,可通過增加節點來提高並行處理的能力,擴展能力較好。其類似於SMP(對稱多處理)模式,但是當存儲器接口達到飽和的時候,增加節點並不能獲得更高的性能 。
    Shared Nothing各個處理單元都有自己私有的CPU/內存/硬盤等,不存在共享資源,類似於MPP(大規模並行處理)模式,各處理單元之間通過協議通信,並行處理和擴展能力更好。典型代表DB2 DPF和hadoop ,各節點相互獨立,各自處理自己的數據,處理後的結果可能向上層彙總或在節點間流轉。
    我們常說的 Sharding 其實就是Share Nothing架構它是把某個表從物理存儲上被水平分割,並分配給多臺服務器(或多個實例),每臺服務器可以獨立工作,具備共同的schema,比如MySQL Proxy和Google的各種架構,只需增加服務器數就可以增加處理能力和容量。
    這裏百度上說RAC是Share Disk我看了下確實大部分畫的RAC 都是共享磁盤,當然可能也有其他架構的,姜老師這裏寫的是Share Everything 可能當時出書的時候確實是這個,後續RAC演變了吧(猜測)。RAC也有其高可用的說明,只能說它們兩個各有優缺點,看實際業務場景需要哪種。
  • NDB的特點是數據全部放在內存中(從MySQL5.1版本開始,可以將非索引數據放在磁盤上)因此主鍵查找(primary key lookups)的速度極快,並且通過添加NDB數據存儲節點(Data Node)可以線性地提高數據庫性能,是高可用,高性能的集羣系統。

4.Memory存儲引擎

  • Memory存儲引擎將表中的數據存檔在內存中,如果數據庫重啓或發生崩潰,表中的數據都將消失,它非常適用於存儲臨時數據的臨時表,一自己數據倉庫中的維度表。Memory存儲引擎默認使用哈希索引,而不是我們熟悉的B+樹索引。
  • Memory存儲引擎速度非常快,但是也有一定的限制,只支持表鎖,併發性能較差,不支持TEXT和BLOB類型,問題大的是存儲變長字段(varchar)時是按照定長字段(char)的方式,會浪費內存,eBay的工程師已經給出瞭解決方案。

5.Maria存儲引擎

  • Maria存儲引擎是新開發的引擎,設計目標主要是用來取代原有的MyISAM存儲引擎,從來成爲MySQL的默認存儲引擎。
  • Maria存儲引擎的特點是:支持緩存數據和索引文件,應用了行鎖設計,提供了MVVC功能,支持事務和非實物安全的選項,以及更好的BLOB字符類型的處理能力

總結

剩下還有多種存儲引擎,但是感覺平時不怎麼接觸,就不多做介紹,文章後續會繼續更新裏面的知識點。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章