MySQL 技术 内幕: InnoDB存储引擎——读书笔记(一)

    技术2022-05-20  52

    1.1 数据库及实例 数据库:文件的集合,用于存放数 据、日志、错误日志等信息的OS文件或者其他形式文件的集合。 实例:由数据库后台进程/线程以及一个共享内存区组成,是应用程序,位于用户与OS 之间的运行的管理软件。 MySQL中,一般情况下,数据库与实例是一一对应的,但在集群环境中则是一对多的关系。 MySQL属于单进程多 线程架构的DB。在启动时,MySQL会读取配置文件,根据配置文件的参数启动数据库实例,读取顺序 为:/etc/my.cnf -> /etc/mysql/my.cnf -> /usr/local/mysql/etc/my.cnf -> /.my.cnf。若依然没有找到配置文件,MySQL会按照编译时的参数设置启动实例。 1.2MySQL体系结构及主要存储引擎 主要由:连接池组件、管理服务和工具 组件、SQL接口组件、查询分析器组件、优化器组件、缓冲组件、插入式存储引擎以及物理存储文件组成。 插件式存储引擎是底层物理结构的实现,负责 为数据库执行实际的数据I/O操作,并能允许和强制执行面向特殊应用需求的特定特性集合。各存储引擎适应不同的环境,且都是基于表的 ,因此唯有充分理解特定应用需求 和掌握各存储引擎的特点 , 方能提高系统的性能。

    InnoDB (后 面的笔记重点介绍,此处略过)MyISAM只缓存其索引文件,数据库文件的缓存由OS本身完成 。包括MYD和MYI文件。 可通过myisampack来压缩/解压数据文件(霍夫曼编码静态算法压缩),压缩后表是只读的。NDB :集群存储引擎,share nothing集群架构,其数据全部放入内存,主键查找速度很快。NDB中的JOIN操作是在MySQL数据库层完成的,而非存储引擎;复杂的连接操作会 需要巨大的网络开销。Memory :将表中数据放 入内存,易失,采用哈希索引。使用时,有些限制:只支持表锁,并发性能较差;不支持TEXT和BLOB类型;以定长空间存varchar。(注:MysQL使用Memory存储引擎作为临时表来存放SELECT的中间结果集 。 若结果集超过Memory存储引擎表的容量设置,或含有TEXT或BLOB类型,MySQL会将其转换为MyISAM存储引擎表而存放到磁盘。又因 MyISAM不缓存数据文件,因此这时产生的临时表的性能对于查询会有损失。)Archive :只支持INSERT和SELECT操作,可使用zlib算法进行压缩存储。

    1.3MySQL连接方式

    TCP/IP :基于网络的连接。连接时,会进行权限检查。命名管道和共享内存 :Windows系统,同一服务器上的两进程可通过命名管道 连接。MySQL用此方式,需在配置文件中启用--enable-named-pipe选项;要使用共享内存方式,需在my.cnf中添加 --shared-memory,同时客户端使用--protocol=memory选项。Unix套接字 :客户端与服务端位于同一服务器时才可使用。在my.cnf中指 定:-socket=/tmp/mysql.sock,连接时指定:./mysql -S /tmp/mysql.sock。

    附 言: 该书讲解了InnoDB存储引擎的体系结构和工作原理,包括了InnoDB表的存储结构、数据页结构、分区表的种类、索引及算法、锁、事务等 内容,并结合InnoDB的源代码讲解了其内部实现机制。 前言中作者的几个观点颇有道理,遂摘录如下:

    任何时候WHY都比WHAT重要。不要相信任何“神话”,学会自己思 考不要墨守成规,大部分人都知道的事情可能是错误的不要相信网上的传言,去测试,根据自己的实践做出决定花 时间充分思考,敢于提出质疑

    注:如若涉及版权或者其他问题,请联系本人。


    最新回复(0)