我是靠谱客的博主 正直画板,最近开发中收集的这篇文章主要介绍mysql 默认引擎innodb 初探(一),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

写在前

最近朋友做了个项目,项目准备上线时,一时心血来潮,做压力测试,瞬间惊呆了—平均一秒只处理十几笔订单!十几个订单哦!(项目使用pgsql数据库)
然后开始了丧心病狂的优化,2天后,大概每秒处理量提升为 120-130个订单(每个订单大概有5次sql操作);算下来也就600次数据库操作的样子,完全不符合之前在网上听说pgsql高大上的传说

优化内容如下:
1. 将之前别的同事foreach循环写库的动作,合并成batchInsert;
2. 去除不必要的日志;
3. 将流水和其他非实时的数据写入redis,后台跑脚本处理
4. 升级php版本为 7

所以就开始动起了研究数据库的念头(之前很多都是停留在简单的应用层面,惭愧);
在知乎找了一圈,对比了几本数据库书籍,发现《Mysql技术内幕–InnoDB存储引擎》很不错(理由:至少是面向数据库原理的,不像大部分书籍只是简单的教 主从复制,配置优化,bababa);

本博文算是读书笔记


mysql总概简述

mysql 跨平台,能够运行在当前所有主流系统上;与oracle不同,mysql被设计为一个单进程多线程架构;

mysql体系结构如下:

这里写图片描述

由图1-1可以发现,mysql主要由以下部分组成:
1. 连接池组件
2. 管理服务 和 工具组件
3. SQL接口组件
4. 查询分析器组件
5. 优化组件
6. 缓冲组件
7. 插件式存储引擎
8. 物理文件

mysql各存储引擎介绍

mysql与其他数据库重要区别 :插件式存储引擎的支持
  1. InnoDB存储引擎

    Innodb存储引擎支持事务,主要用于面向在线事务处理(OLTP)的应用;
    特点:行级锁,支持事务,支持外键,类似oracle支持非锁定读(默认读取操作不会产生锁);
    通过多版本并发控制(MVCC)获得搞并发性,并 实现SQL标准的4种隔离级别;
    使用next-key locking策略避免幻读(phantom)现象的产生;
    并且提供插入缓冲(insert buffer),二次写(double write),自适应哈希索引(adaptive hash index),预读(read ahead)等高性能和高可用的功能。
    数据存储按照聚集(clustered)方式,根据主键顺序存放;(如果没有指定主键,会采用非null的唯一key作为主键,否则默认创建一个6字节大小的默认主键)
    
  2. MyISAM存储引擎

     MyISAM存储引擎不支持事务,表锁设计,支持全文索引,主要 面向在线应用(OLAP)数据库应用
    myisam存储文件,分为MYI(索引文件) 和 MYD(数据文件)两部分
    值得注意的是,myisam存储引擎的缓冲池只缓存索引文件,数据文件的缓存交由操作系统本身完成;(后续可以看到innodb既有index cache,又有data cache)
    
  3. NDB存储引擎

     NDB存储引擎主要用于集群,特点是数据全部存放在内存中(mysql5.1后可以将非索引数据放在磁盘上),所以主键查找极快;
    由于可以自由添加存储节点,可以线性提高数据库性能;
    但是由于NDB存储引擎的连接(join)操作是在Mysql数据库层完成的,而不是在存储引擎层;所以复杂连接操作需要巨大网络开销,因此查询会很慢;
    
  4. Memory存储引擎

    memory存储引擎(或称 heap存储引擎)将数据存放在内存中,也就意味着数据库重启或者崩溃的话,表中的数据就会丢失;
    主要做为临时表使用,
    值得注意的是 : memory存储引擎使用的是哈希索引,而不是B+,也就是说memory类型的表查找时间复杂度O(1),非常快
    由于memory存储引擎只支持表锁,并发较差;并且不支持TXT 和 BLOB类型
    存储变长类型(varchar)时是按照定长字段(char)的方式存储,所以会浪费内存(不过eBay工程师已经给出patch解决方案,可以Google);
    tips :
    mysql数据库使用memory存储引擎作为临时表的默认引擎,存放查询的中间结果;如果中间结果过大或者包含TXT 或 BLOB类型的字段,Mysql会将其转换为MyISAM存储引擎,由于myisam不缓存数据文件,因此性能为有所损失;
    
  5. Archive存储引擎

    Archive存储引擎只支持insert ,select操作;由于使用zlib对数据行(row)进行压缩存储,压缩比一般为1:10,所以非常适合存储归档数据(如 日志信息)。
    支持行锁,MVCC,所以具有高并发性能,不支持事务,所以主要用于高速插入和压缩数据;
    
  6. Maria存储引擎

    Maria是新开发的存储引擎,主要用于取代MyISAM;
    支持行锁,缓冲级缓存索引文件也缓存数据文件,提供MVCC功能,支持事务和非事务安全选项(基本上实现了Innodb存储引擎的特性)
    

各存储引擎对比

tips: 可以使用 show engines G 查看你的mysql支持的存储引擎及各个存储引擎的特性简介

这里写图片描述

mysql客户端连接介绍

mysql连接,即和mysql数据库实例建立通信(进程通信);
通常进程通信主要有 tcp/ip套接字,unix套接字,管道等;

tcp/ip socket连接

客户端和mysql服务器分布在两台主机上,通过tcp/ip协议建立网络连接并进行通信
eg :
mysql -h172.16.8.12 -utest -p
php连接就是如此
可以使用 select host,user,password from mysql.user G 查看角色详情

unix套接字

如果客户端和mysql服务处在同一台服务器,这默认使用Unix套接字进行通信;
可以查看Unix套接字路径
show variables like "socket"

后记

mysql 默认引擎innodb 初探(二)

最后

以上就是正直画板为你收集整理的mysql 默认引擎innodb 初探(一)的全部内容,希望文章能够帮你解决mysql 默认引擎innodb 初探(一)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(66)

评论列表共有 0 条评论

立即
投稿
返回
顶部