新春签到免费送会员,每天签到一次,送一天会员,活动截止时间不定,随时终止!机会不要错过哦!
首页  >   经验  >   mysql多个存储引擎的分析比较

mysql多个存储引擎的分析比较

codexia 2018-12-05 19:41:01 278
mysql   存储   引擎  
简介mysql目前支持好多个存储引擎,到底哪个更适合,还是混合着用呢?我们需要完整的了解各个存储引擎的特性,才能在实际项目中发挥最好的作用。

    在使用数据库设计系统时,采用的是mysql。在实际线上使用的时候,却出现了性能和缓存等方面的问题,研究mysql刻不容缓。然而mysql目前支持好多个存储引擎,到底哪个更适合,还是混合着用呢?我们需要完整的了解各个存储引擎的特性,才能在实际项目中发挥最好的作用。
    下面是摘自【mysql性能调优与架构设计】这本书的关于多个mysql存储引擎的介绍,非常精练而清晰,所以原文保存,备查。

----------------
    MyISAM存储引擎是MySQL默认的存储引擎,也是目前MySQL使用非常广泛的存储引擎之一。它的前身就是我们在MySQL发展历程中所提到的ISAM,是ISAM的升级版本。其实在MySQL最开始发行的时候只有ISAM存储引擎,甚至当时的MySQL可以说还没有存储引擎这个概念。早期MySQL的架构中并没有sql layer和storage engine layer这两个结构清晰的层次,当时不管是理解代码还是系统架构,对于开发者来说都很痛苦的一件事情。到后来,MySQL意识到须要更改架构,将前端的业务逻辑和后端数据存储以清晰的层次结构拆分开,同时对ISAM做了功能上面的扩展和代码的重构,这就是MyISAM存储引擎的由来。
    在MySQL 5.1之前(不包括5.1)的版本中,存储引擎必须在MySQL安装的时候和MySQL一起被编译并同时被安装。也就是说,5.1版之前的版本中,虽然存储引擎层和sql层的耦合已经非常少了,基本上完全是通过接口来实现交互的,但是这两层之间仍然没办法分离,即使在安装的时候也是一样。
    但是从MySQL 5.1开始,MySQL AB对其结构体系做了较大的改造,并引入了一个新的概念:插件式存储引擎体系结构。MySQL AB在改造架构的时候,让存储引擎层和SQL层各自更为独立,耦合更小,甚至可以做到在线加载新的存储引擎,也就是完全可以将一个新的存储引擎加载到一个正在运行的MySQL中,且不影响MySQL的正常运行。插件式存储引擎的架构,使得存储引擎的加载和移出更为灵活方便,也使自行开发存储引擎更为方便简单。在这一点上面,目前还没有哪个数据库管理系统能够做到。
    MySQL的插件式存储引擎主要包括MyISAM、InnoDB、NDB Cluster、Maria、Falcon、Memory、Archive、Merge、Federated等,其中最著名而且使用最为广泛的是MyISAM和InnoDB两种存储引擎。MyISAM是MySQL最早的ISAM存储引擎的升级版本,也是MySQL默认的存储引擎。实际上InnoDB并不是MySQL公司的,而是Innobase软件公司(在2005年被Oracle公司所收购)开发的,其最大的特点是提供了事务控制等特性,所以使用者也非常广泛。
    其他一些存储引擎相对来说都应用于某些特定的场合,如NDB Cluster虽然也支持事务,但是主要是用于分布式环境,属于一个share nothing的分布式数据库存储引擎。Maria是MySQL最新开发(还没有发布最终的GA版本)的MyISAM的升级版存储引擎,Falcon是MySQL公司自行研发的替代当前InnoDB存储引擎的一款带有事务等高级特性的数据库存储引擎,目前正在研发阶段。Memory存储引擎的所有数据和索引均存储于内存中,所以主要是用于一些临时表,或者对性能要求极高,但是允许在系统崩溃(crash)的时候丢失数据的特定场合。Archive是一个数据经过高比例压缩存放的存储引擎,主要用于存放过期而且很少访问的历史信息,不支持索引。Merge和Federated在严格意义上来说,并不能算作存储引擎。因为Merge存储引擎主要用于将几个基表中的数据合并(merge)到一起,对外作为一个表来提供服务,基表主要基于MyISAM存储引擎。而Federated所做的事情,实际上有点类似于Oracle的dblink,主要用于远程存取其他MySQL服务器上面的数据。
----------------
    我个人的一个使用建议,不一定完全正确:MyISAM一般情况下性能更高,如果不需要事务支持的情况下,选择这个比较好。如果需要事务支持,要选择InnoDB。而如果要是分布式设计,那要选择NDB Cluster。如果是需要实时性特别高,性能要求特别高,比如一个设备的实时状态,对于数据的丢失容忍度很大,可以采用Memory引擎。不过在系统实现的时候,可以做一些处理,不完全依赖数据库的容灾。这样可以充分利用数据库的性能和应用系统程序的容灾。

文章标题:mysql多个存储引擎的分析比较
文章地址:http://www.cjjjs.com/article/20181205194001
转载到个人博客,请在文末带上右侧内容(含超链接):本文转载自:mysql多个存储引擎的分析比较
收藏 0 点赞 0

相关阅读

  1. mysql指定条件批量杀死线程的方法
  2. mysql多个存储引擎的分析比较
  3. mysql的max_connections过多问题解决办法
  4. mysql将一个字段拼接并加入随机数字的实现
  5. mysql数据表添加数据重复问题解决办法
  6. navicat for mysql远程连接ubuntu服务器的mysql数据库
  7. mysql执行update更新未更改的数据的问题探讨
  8. mysql锁表解锁数据表问题分析和解决方法总结
  9. 经验分享:mysql数据库查询缓存引发的问题
  10. mysql 5.7.19数据库更改默认密码的各种坑
分享到:
分享文章[mysql多个存储引擎的分析比较]到QQ空间

相关阅读

  • mysql指定条件批量杀死线程的方法

    在处理数据库异常的时候,有时候需要将数据库中相关的进程线程杀掉,以免死锁或者睡眠导致大量的数据库操作卡死

  • mysql多个存储引擎的分析比较

    mysql目前支持好多个存储引擎,到底哪个更适合,还是混合着用呢?我们需要完整的了解各个存储引擎的特性,才能在实际项目中发挥最好的作用。

  • mysql的max_connections过多问题解决办法

    最近发现mysql一个奇怪的问题,好好的代码,运行一段时间后,数据库操作就失败了。一开始以为是操作了多个数据库,可能是数据库串了,经过检查,确实没有错。后来在Navicat工具刷新数据的时候,提示了mysql的连接数过多的问题(connections too many)。因为此前也出现过这样的问题,没想到现在又出来了。

  • mysql将一个字段拼接并加入随机数字的实现

    在数据库的数据处理的过程中,我们可能会遇到这种情况,我们需要将一个字段批量处理一下,需要按照一个格式来处理,但是因为数据量大,手动处理可能不太现实,那么就需要直接使用sql语句来实现了。因为这是比较复杂点的功能,用的少,所以很多人都不太熟悉,就此我将我的方法介绍给大家。

  • mysql数据表添加数据重复问题解决办法

    mysql数据表添加数据重复问题,在做了重复性检测后依然会发生,是因为并发操作引起的。然而主键却不能很好的利用,那么我们只有寻求其他办法了。本文给你一个可行的办法,很好的解决了这个问题。

  • navicat for mysql远程连接ubuntu服务器的mysql数据库

    navicat for mysql远程连接ubuntu服务器的mysql数据库

  • mysql执行update更新未更改的数据的问题探讨

    在一次数据表操作的时候,发现更新与数据表中一样的数据的时候,mysql竟然返回影响的行数为0行。然而程序的逻辑是依据影响的行数来判断是否执行成功的,然后就成功入坑了。而SQL SERVER会正常返回1行。

  • mysql锁表解锁数据表问题分析和解决方法总结

    昨天在操作一个mysql数据表时,发现执行了数据表操作的代码一直都不返回,等了很久才返回超时错误。然后我就用数据库工具Navicat执行语句,发现查询语句没有问题,然而更新语句却卡死了。然后重启了数据库服务,再重试更新语句,依然卡死。

  • 经验分享:mysql数据库查询缓存引发的问题

    我们做的系统使用了最新的安全机制,然而在实际测试中发现有一个很奇怪的问题,有时候登陆成功,有时候又登陆不成功。我们重启了nginx、重启了uwsgi、重启了mysql,但是这个问题一直都会存在。

  • mysql 5.7.19数据库更改默认密码的各种坑

    mysql 5.7.19不再使用password字段更新默认数据库密码,而是使用authentication_string字段来更新