zoukankan      html  css  js  c++  java
  • MySQL笔记(1)---MySQL体系结构和存储引擎

    1.前言

      本系列记录MYSQL数据库的一些结构和实现特点,方便查询。

    2.基本概念

      数据库:物理操作系统文件或者其他形式文件类型的集合。MySQL中数据库文件可以是frm、MYD、MYI、ibd结尾的文件。使用NDB引擎时,可以是内存中的文件。

      实例:MySQL数据库由后台线程以及一个共享内存区组成。共享内存可以被运行的后台线程所共享。MySQL数据库实例在系统上的表现就是一个进程。

    2.2 MySQL体系结构

      这是MySQL的一个体系结构。可以看出大致分成了四层:

        第一层:处理客户端连接的连接池

        第二层:处理客户端请求的组件,包括:SQL接口,查询分析器,优化组件和缓冲组件。  管理组件和工具组件也在这一层。

        第三层:插件式的存储引擎(注意:存储引擎是基于表的,不是数据库)

        第四层:物理文件系统

    3.存储引擎

      插件式的存储引擎好处是可以根据实际需要替换相应的引擎。

    3.1 InnoDB存储引擎

      支持事务,行锁设计,支持外键,非锁定读,即默认读取操作不会产生锁。

      数据放在一个逻辑的表空间中,由InnoDB进行管理。MySQL4.1开始,每个表可以单独存放到一个独立的ibd文件中。

      通过多版本并发控制(MVCC)来获得高并发性,并实现了SQL的四种隔离级别,默认REPEATABLE级别。使用next-key locking策略避免幻读。

      提供插入缓冲、二次写、自适应哈希索引、预读等高性能和高可用功能。

      表中的数据存储采取聚集(clustered)的方式,因此每张表的存储都是按主键的顺序进行存放的。如果没有显示的主键,会生成一个6字节的ROWID

    3.2 MyISAM存储引擎

      不支持事务,表锁设计,但是支持全文索引,主要面向一些OLAP数据库应用。

      只缓冲索引文件,不缓冲数据文件。

      表由MYD和MYI组成,MYD存放数据文件,MYI存放索引文件,5.0版本之前默认支持表大小是4GB,如果需要支持大于4GB的表,需要定制MAX_ROWS和AVG_ROW_LENGTH属性。5.0版本开始支持256TB单表数据。

    3.3 NDB存储引擎

      NDB特点是数据全部放在内存中,因此主键查找的速度极快,并且通过添加NDB数据存储节点可以线性地提供数据库性能,5.1版本开始,可以将非索引的数据放在磁盘上。是高可用、高性能的集群系统。

      注意:连接操作JOIN是在数据库层完成的,而不是存储引擎。这意味着复杂的连接操作需要巨大的网络开销,查询速度慢。

    3.4 memory存储引擎

      表数据存在内存中,数据会丢失,适用于存储临时数据的临时表。

      memory存储引擎默认使用哈希索引,而不是B+树索引。

      并发性能差,不支持TEXT和BLOB列类型,存储varchar是按char的方式进行,会浪费内存。

      MySQL使用Memory存储引擎作为临时表来存放查询的中间结果集,如果大于存储引擎的容量设置,又或者中间结果含有TEXT或BLOB列类型字段,会将其转换到MyISAM存储引擎存放到磁盘中。MyISAM数据库不缓存数据文件,因此这时产生的临时表的性能对查询会有损失。

    3.5 Archive存储引擎

      这个引擎只支持INSERT和SELECT操作,从5.1版本开始支持索引。使用zlib算法将数据行压缩后存储,比例可以达到1:10。适用于存储归档数据,如日志信息。

      使用行锁来实现高并发的插入操作,非事务安全,设计目标就是提供高速的插入和压缩功能。

    3.6 Federated存储引擎

      这个引擎并不存放数据,只是指向一台远程MySQL数据库服务器上的表。类似于SQL Server的链接服务器和Oracle的透明网关,不同在于,目前其只支持MySQL数据库表,不支持异构数据库表。

    3.7 Maria存储引擎

      这个是新开发的引擎,目标是用于取代原有的MyISAM存储引擎,成为MySQL的默认存储引擎。

      特点:支持缓存数据和索引文件,应用行锁设计,提供MVCC功能,支持事务和非事务选项,更好的BLOB字符类型的处理性能。

    3.8 小结

      MySQL支持全文索引,MyISAM、InnoDB(1.2版本),Sphinx。

      支持事务,InnoDB。ETL操作,MyISAM会有优势,OLTP(在线事务处理)环境,InnoDB更好。

      SHOW ENGINES可以查看mysql支持的存储引擎。

      下表是mysql5.6的主要存储引擎的对比:https://dev.mysql.com/doc/refman/5.6/en/storage-engines.html

    FeatureMyISAMMemoryInnoDBArchiveNDB
    B-tree indexes Yes Yes Yes No No
    Backup/point-in-time recovery (note 1) Yes Yes Yes Yes Yes
    Cluster database support No No No No Yes
    Clustered indexes No No Yes No No
    Compressed data Yes (note 2) No Yes Yes No
    Data caches No N/A Yes No Yes
    Encrypted data(note 3) Yes Yes Yes Yes Yes
    Foreign key support No No Yes No Yes (note 4)
    Full-text search indexes Yes No Yes (note 5) No No
    Geospatial data type support Yes No Yes Yes Yes
    Geospatial indexing support Yes No Yes (note 6) No No
    Hash indexes No Yes No (note 7) No Yes
    Index caches Yes N/A Yes No Yes
    Locking granularity Table Table Row Row Row
    MVCC No No Yes No No
    Replication support (note 1) Yes Limited (note 8) Yes Yes Yes
    Storage limits 256TB RAM 64TB None 384EB
    T-tree indexes No No No No Yes
    Transactions No No Yes No Yes
    Update statistics for data dictionary Yes Yes Yes Yes Yes
  • 相关阅读:
    eclipse中解决update maven之后jre被改成1.5的问题
    Navicat for MySQL密鈅
    静态创建和动态创建对象的区别
    vector相关操作总结
    C++的编码技巧相关总结
    关于VS中未经处理的异常的梳理
    头文件用于声明而不是定义
    SQL单表查询练习部分总结
    delete对象时会自动调用类的析构函数
    SQL中的sum在何时会返回为null
  • 原文地址:https://www.cnblogs.com/lighten/p/9257758.html
Copyright © 2011-2022 走看看