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

来源:互联网 发布:python循环 编辑:程序博客网 时间:2024/06/05 18:27

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

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

原创粉丝点击