MySQL存儲引擎

MySQL存儲引擎:

表類型:
    CREATE TABLE ... ENGINE=

InnoDB:
    處理大量的短期事務;
    數據存儲於“表空間(table space)”中;
        (1) 所有InnoDB表的數據和索引放置於同一個表空間中;
            表空間文件:datadir定義的目錄下
                數據文件:ibddata1, ibddata2, ...
        (2) 每個表單獨使用一個表空間存儲表的數據和索引;
            innodb_file_per_table=ON     #每表使用單獨的表空間,用來存儲數據,實現高級功能,實現單表備份
            mysql> SHOW GLOBAL VARIABLES LIKE 'innodb_file_%';
            +--------------------------+----------+
            | Variable_name            | Value    |
            +--------------------------+----------+
            | innodb_file_format       | Antelope |
            | innodb_file_format_check | ON       |
            | innodb_file_format_max   | Antelope |
            | innodb_file_per_table    | ON       |
            +--------------------------+----------+
            4 rows in set (0.01 sec)

            數據文件(存儲數據和索引):tbl_name.ibd, 
            表格式定義文件:tbl_name.frm

    基於MVCC來支持高併發,支持所有的四個隔離級別,默認級別爲REPEATABLE READ; 間隙鎖防止幻讀;
    innodb表使用聚集索引
    innodb支持“自適應hash索引”
    鎖粒度:行級鎖

    MariaDB (XtraDB (percona))

    數據存儲:表空間
    併發:MVCC, 間隙鎖
    索引:聚集索引、輔助索引
    性能:預計操作、自適應hash、插入緩存區
    備份:支持熱備(xtrabacup)

MyISAM:
    支持全文索引(FULLTEXT index)、壓縮、空間函數(GIS); 但不支持事務,且爲表級鎖;
    崩潰後無法安全恢復

    適用場景:只讀(或者寫較少)、表較小(可以接受長時間進行修復操作)
        Aria:crash-safe

    文件:
        tbl_name.frm: 表格式定義
        tbl_name.MYD: 數據文件
        tbl_name.MYI: 索引文件

    特性:
        加鎖和併發:表級鎖
        修復:手工或自動修復、但可能丟失數據
        索引:非聚集索引
        延遲更新索引鍵:
        壓縮表

    行格式:dynamic, fixed, compressed, compact, redundent

其它的存儲引擎:
    CSV:將普通的CSV(字段通過逗號分隔)作爲MySQL表使用;
    MRG_MYISAM:將多個MyISAM表合併成爲一個虛擬表;
    BLACKHOLE:類似於/dev/null,不真正存儲任何數據;
    MEMORY:所有數據都保存於內存中,內存表;支持hash索引;表級鎖;
        臨時表
    PERFORMANCE_SCHEMA:僞存儲引擎;
    ARCHIVE:只支持SELECT和INSERT操作;支持行級鎖和專用緩存區;
    FEDERATED:用於訪問其它遠程MySQL服務器一個代理,它通過創建一個到遠程MySQL服務器的客戶端連接,並將查詢傳輸到遠程服務器執行,而後完成數據存取;
        在MariaDB的上實現是FederatedX

    MariaDB支持的其它存儲引擎:
        OQGraph
        SphinxSE
        TokuDB
        Cassandra
        CONNECT
        SQUENCE

併發控制:
    鎖:
        讀鎖:共享鎖
        寫鎖:獨佔鎖

    鎖粒度:
        表級鎖
        行級鎖

        鎖策略:在鎖粒度及數據安全性尋求的平衡機制;
            每種存儲引擎都可以自行實現其鎖策略和鎖粒度;
            MySQL在服務器級也實現了鎖,表級鎖;用戶可顯式請求;
                (1) LOCK TABLES
                    tbl_name [[AS] alias] lock_type
                    [, tbl_name [[AS] alias] lock_type] ...
            mysql> LOCK TABLES students WRITE;

                lock_type:
                    READ [LOCAL]
                  | [LOW_PRIORITY] WRITE

                    UNLOCK TABLES
            mysql> UNLOCK TABLES;       

                (2) FLUSH TABLES tb_name[,...] [WITH READ LOCK] [FOR UPDATE]

                (3) SELECT clase [FOR UPDATE] [WITH READ LOACK]

    分類:
        隱式鎖:由存儲引擎自動施加鎖;
        顯式鎖:
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章