InnoDB存储引擎

该引擎是MySQL数据库的默认事务型引擎,它被设计用来处理大量短期事务(绝大多数正常提交,很少回滚)

InnoDB的数据存储在表空间中,表空间是由InnoDB管理的一个黑盒子,由一系列的数据文件组成,在MySQL4.1之后的版本中,InnoDB可以将每个表的数据和索引存放在单独的文件中。InnoDB也可以使用裸设备作为表空间的存储介质(现在已无必要)。InnoDB采用MVCC来支持高并发,并实现了其中的四个隔离级别,默认级别为可重复读,并通过间隙锁策略来防止幻读的出现。间隙锁使得InnoDB不仅仅锁定查询涉及的行,还会对索引中的间隙进行锁定,以防止幻影行的插入。InnoDB表是基于聚簇索引建立的,InnoDB的索引结构和MySQL的其他存储引擎有非常大的不同,聚簇索引对主键查询有非常高的性能。不过它的二级索引中必须包含主键列,所以如果主键列非常大的话,其他的索引都会很大。(表上的索引如果特别多的话,主键列应当尽可能的小)。InnoDB的数据存储格式是平台独立的。

InnoDB内部已经做了许多的优化,包括从磁盘读取数据时候采用的可预测性读,能够自动在内存中建立hash索引以加速读操作,加速插入操作的插入缓冲区等。作为事务型存储引擎,InnoDB通过一些机制和工具支持真正的热备份,MySQL的其他存储引擎不支持热备份。

MyISAM存储引擎

MySQL5.1及之前的版本,MyISAM是默认的存储引擎。MyISAM提供了大量的特性,包括全文索引、压缩、空间函数(GIS),但MyISAM不支持事务和行级锁,并且崩溃后无法安全恢复。

MyISAM会将表存储在两个文件中:数据文件(.MYD)和索引文件(.MYI)。

MyISAM对整张表加锁,而不是针对行。读取时间会对需要读到的所有表加共享锁,写入时则对表加排它锁。但是在表有读取查询的同时,也可以往表中插入新的记录(并发插入)。对于MyISAM表,MySQL可以手工或者自动执行检查和修复操作。执行表的修复可能导致一些数据的丢失,而且修复速度是非常慢的。 对于MyISAM表,即使是BLOB和TEXT这种长字段,也可以基于前500个字符创建索引。创建MyISAM表的时候,如果指定了DELAY_KEY_WRITE选项,在每次修改执行完成时,不会立即写回到磁盘,而是会写到内存中的键缓冲区,只有在清理键缓冲区或者关闭表的时候才会将对应的索引块写入到磁盘。

如果表在创建并导入数据之后,不会再进行修改操作,那么这样的表或许适合采用MyISAM压缩表。压缩表是不能进行修改的(除非解压修改再压缩)。压缩表可以极大减少磁盘空间的占用,因此也可以减少磁盘I/O,从而提升查询性能。压缩表也同样支持索引,但索引也只能是只读的。

MyISAM引擎设计简单,数据以紧密格式存储,所以在某些场景下性能良好。MyISAM有一些服务器级别的性能扩展限制。

Archive引擎

该引擎只支持Insert和Select操作,Archive引擎会缓存所有的写并利用zlib对插入的数据进行压缩,所以比MyISAM表的磁盘I/O更少,但是每次Select都需要执行全表扫描。(适合数据采集以及日志)

Archive引擎支持行级锁和专用的缓冲区,可以实现高并发插入。

Blackhole引擎

该引擎没有实现任何存储机制,它会丢弃所有插入的数据,不做任何保存,但服务器会记录Blackhole表的日志,所以可以用于复制数据到备份数据库。

CSV引擎

可以将普通的CSV文件作为MySQL的表来处理,但这种表不支持索引。CSV引擎可以在数据库运行时拷入或者拷出文件。CSV引擎作为一种数据交换的机制,非常有用。

Federated引擎

该引擎是访问其他MySQL服务器的一个代理,它会创建一个到远程MySQL服务器的客户端连接,并将查询传输到远程服务器执行,然后提取或者发送需要的数据。

Memory引擎

如果需要快速地访问数据,并且这些数据不会被修改,重启以后丢失也没有关系,那么可以使用Memory表。所有的数据都可以存储在内存中,不需要进行磁盘I/O。Memory表的结构在重启以后还会保留,但是数据会丢失。

Memory表支持Hash索引,因此查找操作非常快。Memory是表级锁,因此并发写入的性能比较低,不支持BLOB或者TEXT类型的列,并且每一行的长度是固定的,因此可能导致内存浪费。

如果MySQL在执行查询的过程中需要使用临时表来存储中间结果,内部使用的临时表就是Memory表。如果中间结果太大超过了Memory表的限制,或者含有BLOB或者TEXT字段,则临时表会转换成MyISAM表。

Merge引擎

该引擎是MyISAM引擎的一个变种,由多个MyISAM表合并而来的虚拟表。

NDB集群引擎

MySQL集群使用的引擎。

选择合适的引擎

除非需要用到某些InnoDB不具备的特性,并且没有其他的办法可以替代,否则都应该优先选择InnoDB引擎。

事务 如果应用需要事务的支持,那么InnoDB是目前最好的选择,如果不需要事务,并且主要的是Insert和Select的话,那么MyISAM是不错的选择。

备份 如果可以定期地关闭服务器来执行备份,那么备份的因素可以忽略。反之,如果需要在线热备份,那么选择InnoDB就是基本的要求。

崩溃恢复 数据量比较大的时候,系统崩溃后如何快速地恢复是一个需要考虑的问题。

特有的特性 有些应用可能依赖一些存储引擎所独有的特性或者优化。

mysql集群数据引擎_MySQL数据引擎相关推荐

  1. mysql集群参数讲解_Mysql集群讲解(一)

    Mysql集群讲解(一) 主从复制概述 在实际生产中,数据的重要性不言而喻,提供安全可靠的数据保障是技术与运维部门的职责所在: 如果我们的数据库只有一台服务器,那么很容易产生单点故障的问题,比如这台服 ...

  2. mysql 集群 增加服务器_MYSQL集群服务配置

    MYSQL集群服务配置 篇文档旨在介绍如何安装配置基于2台服务器的MySQL集群.并且实现任意一台服务器出现问题或宕机时MySQL依然能够继续运行. 注意! 虽然这是基于2台服务器的MySQL集群,但 ...

  3. mysql集群不同步_mysql数据库集群出现1236错误导致主库与从库无法同步的

    mysql数据库集群出现1236错误导致主库与从库无法同步的 发布时间:2020-02-28 02:50:14 来源:51CTO 阅读:153 作者:o凤舞九天o /etc/my.cnf中sync_b ...

  4. mysql集群方案对比_MySQL云原生方案在携程开发测试场景中的实践

    一.背景与使用场景 随着Kubernetes平台在容器云计算领域的一统天下,云原生 (Cloud Native) 一词也被提的越来越频繁.各类应用纷纷走上了容器化.云原生化的道路,无状态服务应用在Ku ...

  5. mysql 集群与主从_Mysql集群和主从

    1.Mysql cluster: share-nothing,分布式节点架构的存储方案,以便于提供容错性和高性能. 需要用到mysql cluster安装包,在集群中的每一个机器上安装. 有三个关键概 ...

  6. mysql集群重启失败_Mysql集群重启失败

    问题描述 今天遇到一个问题,openstack集群的3个控制节点内存故障后,同事重启了三个机器,启动后,三个节点上的mysqld(其实就是mariadb)服务都起不来了 根据排查日志/var/log/ ...

  7. 数据库应用——MyCat代理MySQL集群

    MyCat代理MySQL集群 一.MyCat代理MySQL集群 1.1 MyCat概述 1.2 MyCat功能 1.3 MyCat图示 二.Mycat实战详解 2.1 MyCat实战案例 2.1.1 ...

  8. mysql集群跨地域同步部署_跨地域冗余 - 跨数据中心部署方案 - 《TiDB v2.1 用户文档》 - 书栈网 · BookStack...

    跨数据中心部署方案 作为 NewSQL 数据库,TiDB 兼顾了传统关系型数据库的优秀特性以及 NoSQL 数据库可扩展性,以及跨数据中心(下文简称"中心")场景下的高可用.本文档 ...

  9. 容器化|在 S3 备份恢复 RadonDB MySQL 集群数据

    作者:程润科.钱芬 视频:钱芬 上一篇文章我们演示了如何快速实现 MySQL 高可用集群部署,以及部署集群的校验和卸载方式.本文将演示如何对集群进行备份和恢复. 部署版本为 RadonDB MySQL ...

最新文章

  1. su 和su -的区别
  2. uniCloud云函数——微信小程序登录凭证校验[code2Session](即:使用 code 换取 openid 和 session_key 等信息)解决方案
  3. boost::gil::channel_view用法的测试程序
  4. linux查看端口号是否被占用
  5. arcsoft panorama maker 6_2021年6月30日入宅新居好吗,农历五月二十一是乔迁吉利日吗——天玄网...
  6. python编程的基本方法有哪些_Python编程中常用的基础知识有哪些?
  7. 单例设计模式之安全的懒汉式
  8. 将两个(或多个)Item建立关联 app_field.set_dependent_field和app_field.clear_dependent_fields...
  9. [转] caffe数据层参数说明
  10. pb 修改数据窗口种指定字段位置_如何在PB数据窗口中修改数据设置数据窗口的更新属性...
  11. C/C++[codeup 1925]特殊排序
  12. Wherehows项目部署文档
  13. 最详细的双目摄像头测距离(深度)的原理
  14. 怎样用计算机做周计划表,在电脑桌面上制定每日工作日程计划表适合用哪一便签软件?...
  15. 为手机游戏而生的Linux 发行版
  16. 西电2019计算机等级考试,西安电子科技大学2019《计算方法》期末考试试题
  17. 遗传算法优化BP神经网络,bp神经网络的优化算法
  18. W ndows xp 开机音乐,当年番茄花园Ghost XP的开关机音乐还记得吗?流传度媲美原版...
  19. 如何注册earthdata账号
  20. 如何隐藏table 中的指定列?

热门文章

  1. VTK修炼之道16:图像处理_窗口分割和图像融合(ViewportvtkImageBlend)
  2. 加快vs2010的启动速度
  3. Linux CPU cache
  4. BugkuCTF-reverse:Easy_vb + Easy_Re
  5. stm32 独立看门狗学习
  6. 【一雪前耻!】两种方法判断大小端模式
  7. 亿级 ELK 日志平台构建实践
  8. 记录一次与大神们的关于GAN应用于NLP的讨论 (后续)
  9. Xposed源码剖析——hook具体实现
  10. Android框架攻击之Fragment注入