• 《MySQL技术内幕InnoDB存储引擎》读书笔记 第一章


    Mysql体系结构和存储引擎

    1.1 定义数据库和实例

      数据库:物理操作系统文件或其他形式文件类型的集合。    数据库文件可以使frm,MYD,MYI,ibd结尾的文件。

      实例:MySQL数据库由后台线程以及一个共享内存区组成。    数据库实例才是真正用于操作数据库文件的。

      实例与数据库的关系通常是一一对应的,在集群情况下可能存在一个数据库被多个数据实例使用的情况。

      MySQL被设计为一个单进程多线程架构的数据库,这点与SQL Server比较类似,但与Oracle多进程的架构有所不同(Oracle的Windows版本也是单进程多线程的架构的)

      MySQL数据库实例在系统上的表现就是一个进程。

      Oracle 中如果没有参数文件,在启动实例时会提示找不到该参数文件,数据库启动失败。而在MySQL数据库中,可以没有配置文件,在这种情况下,MySQL会按照编译时的默认

    参数设置启动实例。

      MySQL 数据库是按 /etc/my.cnf -->/etc/mysql/my.cnf-->/usr/local/mysql/etc/my.cnf-->~/.my.cnf 的顺序读取配置文件。如果几个配置文件中都有同一个参数,MySQL数据库以读取到的最后一个配置文件中的参数为准。  在Linux环境下,配置文件一般放在 /etc/my.cnf 下。在Windows平台下,配置文件的后缀名可能是.cnf,也可能是.ini。

      配置文件中有一个参数datadir,该参数指定了数据库所在的路径。在Linux操作系统下默认datadir为/usr/local/mysql/data

      可以用命令查看  mysql > SHOW VARIABLES LIKE ‘datadir’G;

      

    1.2 MySQL体系结构

      从概念上来说,数据库是文件的集合,是依照某种数据模型组织起来并存放于二级存储器中的数据集合;数据库实例时是程序,是位于用户与操作系统之间的一层数据管理软件,用户对数据库数据的任何操作,包括数据库定义、数据查询、数据维护、数据库运行控制等都是在数据库实例下进行的,应用程序只有通过数据库实例才能和数据库打交道。

      MySQL由以下几部分组成:

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

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

    1.3 MySQL存储引擎

      1.3.1 InnoDB存储引擎

        InnoDB存储引擎支持事物,面向在线是事物处理(OLTP)的应用。其特点是行锁设计、支持外键,并支持类似于Oracle的非锁定读,即默认读取操作不会产生锁。

        从MySQL4.1(包括4.1)版本开始,InnoDB存储引擎的表单独存放到一个独立的ibd文件中。此外,InnoDB存储引擎支持用裸设备用来建立其表空间。

        如果没有显示地定义时指定主键,InnoDB存储引擎会为每一行生成一个6字节的ROWID,并以此作为主键。

       1.3.2 MyISAM存储引擎

        MyISAM存储引擎不支持事务、表锁设计,支持全文检索,主要面向一些OLAP数据库应用。在MySQL5.5.8版本之前MyISAM存储引擎是默认的存储引擎(除Windows版本外)。  MyISAM存储引擎的缓冲池只缓存索引文件,而不缓冲数据文件。

        MyISAM存储引擎表由MYD和MYI组成,MYD用来存放数据文件,MYI用来存放索引文件。 使用myisampack工具压缩后的表是只读的。

        在MySQL5.0版本之前,MyISAM默认支持的表大小为4GB, 5.0之后默认支持256TB的单表数据。

      1.3.3 NDB存储引擎

        NDB存储引擎是一个集群存储引擎 更高的可用性 数据全部放在内存中(5.1版本后 可以将非索引数据放在磁盘上) 是高可用、高性能的集群系统。

        NDB存储引擎的连接操作是在MySQL数据库层完成的,而不是在存储引擎层完成的。这意味着,复杂的连接操作需要巨大的网络开销,因此查询速度很慢。如果解决了这个问题,NDB存储引擎的市场应该非常巨大。

      1.3.4 Memory 存储引擎

        Memory 存储引擎(之前称为HEAP存储引擎)将表中的数据存放在内存中,如果数据重启或发生崩溃,表中的数据都将消失。

        不支持TEXT和BLOB列类型。

      1.3.5 Archive 存储引擎

        Archive存储引擎只支持INSERT和SELECT操作,从MySQL5.1开始支持索引。

        Archive存储引擎非常适合存储归档数据,如日志信息。Archive存储引擎使用行锁来实现高并发的插入操作,但其本身并不是事物安全的存储引擎,其设计目标主要是提供高速的插入和压缩功能。

      1.3.6 Federated存储引擎

        Federated存储引擎表并不存放数据,它只是指向一台远程数据库服务器上的表。

      1.3.7 Maria存储引擎

        可以看做是MyISAM的后续版本。Maria存储引擎的特点是:支持缓存数据和索引文件,应用了行锁设计,提供了MVCC功能,支持事物和非事务安全的选项,以及更好的BLOB字符类型的处理性能。

      mysql > SHOW ENGINESG;    //查看支持的存储引擎

      1.5 连接MySQL

      连接MySQL操作是一个连接进程和MySQL数据库实例进行通信。 进程通信的方式有管道、命名管道、命名字、TCP/IP套接字、UNIX域套接字。

      TCP/IP是基于网络的,而套接字一般用于同一台服务器。

      例:

        TCP/IP :    C: > mysql -h 192.168.0.101 -u david -p

        UNIX域套接字: mysql -udavid -S  /tmp/mysql.sock

    1.6 小结

      数据库和实例定义

      体系结构 进一步突出 实例和数据库

      MySQL插件式存储引擎

      MySQL存储引擎无优劣差异只有适合不适合。

      

    浓郁而清晰的活着
  • 相关阅读:
    [Javascript] What is JavaScript Function Currying?
    [Javascript] Array methods in depth
    [ES6] ... spread operator
    [AngularJS] New in Angular 1.5 ng-animate-swap
    [Reduc] React Counter Example
    [Redux] Implementing Store from Scratch
    [Redux] Store Methods: getState(), dispatch(), and subscribe()
    [Redux] Introduction
    [Javascript] Intro to Recursion
    未来-区块链-Micron:区块链永远不会忘记:内存对这项革命性技术的推动作用
  • 原文地址:https://www.cnblogs.com/duxiaohe/p/7517567.html
Copyright © 2020-2023  润新知