关于mysql,暂时做一个总纲,日后读第二遍的时候再做详细记录
数据库主要由 一,最上层的服务层。基于网络的客户端/服务端的工具,做连接处理,授权认证和安全等。 二,第二层是mysql的核心服务功能,查询引擎,包括了查询解析,分析,优化,缓存以及内置函数,存储引擎,触发器,视图等。 三,第三层是存储引擎,负责mysql中数据的存储和提取,和GUN/Linux下的各种文件系统一样,有很多种存储引擎。这三部分组成
1.2.1 读写锁,为解决并发控制,可以通过实现一个由两种类型的锁组成的所系统来解决问题,这两种类型的锁通常被称为共享锁,和排他锁,也叫读锁和写锁。
锁也可以是粗粒度和细粒度,可以是表锁也可以是行锁。
数据库的种类和选型。常用和需要掌握的就是以下这些数据库
1 innoDB存储引擎(正常情况下使用此种即可),支持事务,采用mvcc支持高并发,实现四个标准的隔离级别,通过间隙锁策略防止幻读,innoDB表是基于聚簇索引建立的。
2 MyISAM 存储引擎,是mysql5.1以前的默认的存储引擎,有全文索引,压缩,空间函数等特性,但是不支持事务和行级锁,崩溃后无法安全回复,对于只读的数据,或者表比较小,可以忍受修复操作的情境下适用。数据信息会存储在两个文件中,数据文件和索引文件,分别以.MYD和.MYI为扩展名。只是表锁,读取时会需要读到的所有表加共享锁,写入时则对表加排他锁,但是在读取查询的同事也可以往表中插入新记录。
创建MyISAM表的时候,如果指定了DELAY_KEY_WRITE选项,在每次修改执行完成时,不会立刻将修改的索引数据写入磁盘,而是会写到内存中的键缓冲区,只有在清理见缓冲区或者关闭表的时候才会将对应的索引块写入到磁盘,这种方式可以极大地提升写入性能。但是在数据库或者主机崩溃时会造成索引损坏,需要执行修复,此存储引擎还可以记录地理位置。
3 Archive引擎,只支持insert和select操作,mysql5.1之前不支持索引,会缓存所有的写并利用zlib对插入的行进行压缩,但select需要全表扫描,所以archive表事和日志和数据采集类应用。在需要更快速的insert操作的场合下使用,支持行级锁和专用的缓冲区,可以实现高并发的插入,模仿了事务和MVCC特性,但不是一个事务型的引擎,而是一个针对告诉插入和压缩做了优化的简单引擎。
4 Blackhole引擎,没有实现任何存储机制,会丢弃所有插入的数据不做任何保存,但是服务器会记录Blackhloe表的日志,可以用于复制数据到备库或者只是简单的记录到日志,这种特殊的存储引擎可以在一些特殊的复制架构和日志审核时发挥作用,但是不推荐。
5 CSV引擎,可以将普通的CSV文件作为Mysql的表来处理,但是不支持索引,可以在数据库运行时拷入或考出文件,可以将excel等电子表格软件中的数据存储为csv文件,然后复制到mysql数据目录下,就能在Mysql中打开使用。
6 Memory引擎,如果需要快速地访问数据,并且这些数据不会被修改,重启以后丢失也没有关系,就可以用这个,memory表至少比MyISAM表要快一个数量级,因为所有的数据都保存在内存中,不需要进行磁盘I/O,Memory表的结构在重启以后还会保留,但数据会丢失。