• MySQL技术内幕读书笔记(一)——Mysql体系结构和存储引擎


    MySQL体系结构和存储引擎

    定义数据库和实例

    • 数据库:物理操作系统文件或者其他形式文件类型的结合。在MYSQL数据库中,数据库文件可以是frm、MYD、MYI、ibd结尾的文件。当使用NDB引擎时,数据库的文件可能不是操作系统上的文件,而是存放在内存之中的文件,但是定义仍然不变。
    • 实例:MYSQL数据库由后台线程以及一个共享内存区组成。共享内存可以被运行的后台线程所共享。需要牢记的是,数据库实例才是真正用于操作数据库文件的。

    ​ MYSQL被设计为一个单进程多线程架构的数据库。

    # 可以查看当MYSQL数据库实例启动时,会在哪些位置查找配置文件。
    mysql --help | grep my.cnf
    

    ​ 在配置文件中有一个参数是datadir,改参数指定了数据库所在的路径。在LINUX操作系统下默认是/user/local/mysql/data,这个默认路径只是一个链接,实际指向/opt/mysql_data。所以用户必须保证/opt/mysql_data的用户和权限

    MYSQL体系结构

    ​ MYSQL由一下几部分组成:

    • 连接池组件
    • 管理服务和工具组件
    • SQL接口组件
    • 查询分析器组件
    • 优化器组件
    • 缓冲组件
    • 插件式储存引擎
    • 物理文件

    需要特别注意的是:存储引擎是基于表的,而不是数据库。

    MYSQL存储引擎

    ​ 存储引擎是MYSQL区别与其他数据库的一个最重要特性。用户可以根据MYSQL预定的存储引擎接口编写自己的存储引擎。若用户对某一种存储引擎的性能或功能不满意。可以通过修改源码来得到想要的特性,这就是开源带给我们的方便与力量。

    InnoDB存储引擎

    • 支持事务:主要面向在线事务处理(OLTP)应用。特点是
      • 行锁设计
      • 支持外键
      • 支持类似于Oracle的非锁定读,即默认读取操作不会产生锁。
    • 数据放在一个逻辑的表空间,这个表空间像黑盒一样由INNODB存储引擎自身进行管理。它可以将每个INNODB存储引擎的表单独存放到一个独立的ibd文件中。
    • 通过使用多版本并发控制(MVCC)来获得高并发性
    • 实现了SQL标准的四种隔离级别。默认为REPEATABLE级别。使用一种被称为next-keylocking的策略来避免幻读现象的产生。
    • 提供插入缓冲、二次写、自适应哈希索引、预读等高性能和高可用功能。
    • 表中数据采用聚集的方式存放,因此每场表的储存都是按主键的顺序进行存放,如果没有显式指定主键,则会为每一行生成一个6字节的ROWID,并作为主键。

    MyISAM存储引擎

    • 不支持事务,支持全文索引,主要面向一些OLAP数据库应用。
    • 缓冲池只缓冲索引文件,不缓冲数据文件。
    • MYD用来存放数据文件,MYI用来存放索引文件。

    NDB存储引擎

    • 集群架构:share nothing
    • 数据全部放在内存中,因此主键查找的速度极快,并且通过添加NDB数据存储节点可以线性地提高数据库性能,是高可用、高性能的集群系统。
    • NDB存储引擎的连接操作是在MYSQL数据库层完成的,而是在存储引擎层完成的。这意味着,复杂的连接操作需要巨大的网络开销

    Memory存储引擎

    • 数据都存放在内存中,非常适合用于存储临时数据的临时表,以及数据仓库中的维度表。
    • 默认使用哈希索引
    • 只支持表锁,并发性能较差,不支持TEXT和BLOB列类型
    • 存储变长字段(varchar)时按照定常字段(char)的方式进行的,会浪费内存。

    Archive存储引擎

    • 只支持INSERT和SELECT操作
    • 支持索引
    • 使用zlib算法将数据行进行压缩后存储,压缩比一般达1:10
    • 适合存储归档数据,例如日志信息等。
    • 使用行锁实现高并发的插入操作
    • 不支持事务

    FEDERATED存储引擎

    • 不存放数据,只是指向一台远程MYSQL数据库服务器上的表。这非常类似于SQL SERVER的联结服务器和Oracle的透明网关
    • 不支持异构

    Maria存储引擎

    • 支持魂村数据和索引文件
    • 行锁设计,提供了MVCC功能
    • 支持事务和非事务安全的选项
    • 更好的BLOB字符类型的处理性能。
    # 查看数据库锁支持的存储引擎
    SHOW ENGINESG
    
  • 相关阅读:
    C++拷贝构造函数(深拷贝,浅拷贝)
    C++标准库和标准模板库
    MFC 定制控件(Customize Control) 及 MFC CWnd和WIN32 HWND关联方法
    MFC 对象与Win32 SDK 句柄的映射关系
    关于函数返回值的几种情况
    CreateWaitableTimer和SetWaitableTimer函数
    关于C++/C中防止头文件的重复包含的解决办法
    MFC 分割窗体(Splitter Windows)
    MFC中对话框的数据交换(DDX)和数据校验(DDV)
    MFC 消息映射表 及 相关宏定义
  • 原文地址:https://www.cnblogs.com/BlueMountain-HaggenDazs/p/9297868.html
Copyright © 2020-2023  润新知