Mysql 应该选择什么引擎_MySQL
对于如何选择存储引擎,可以简答的归纳为一句话:“除非需要用到某些INNODB 不具备的特性,并且没有其他办法可以替代,否则都应该选择INNODB 引擎”。例如:如果要用到全文索引,建议优先考虑INNODB加上Sphinx的组合,而不是使用支持全文索引的myisam。当然,如果不需要用到InnoDB的特性,同时其他引擎的特性能够更好的满足需求,也可以考虑一下其他存储引擎。举个例子,如果不在乎可扩展能力和并发能力,也不在乎崩溃后的数据丢失问题,却对InnoDB的空间占用比较敏感,这种场合下选择MyISAM就比较合适。
除非万不得已,否则建议不要混合使用多种存储引擎,否则可能带来一系列负责的问题,以及一些潜在的bug和边界问题。存储引擎层和服务器层的交互已经比较复杂,更不用说混合多个存储引擎了。至少,混合存储引擎对一致性备份和服务器参数配置都带来了一定的困难。
如果应用需要不同的存储引擎,请先考虑以下几个因素:
事务
如果应用中需要事务支持,那么InnoDB(或者XtraDB)是目前最稳定,并且经验证的选择。如果不需要事务,并且主要是SELECT 和 INSERT 操作,那么myisam是不错的选择。一般日志型的应用比较符合这一特性。
备份
备份的需求也会影响到存储引擎的选择。如果可以定期的关闭服务器来执行备份,那么备份的因素可以忽略。反之,如果需要在线热备份,那么选择InnoDB就是基本的要求。
崩溃恢复
数据量比较大的时候,系统崩溃后如何快速的恢复是一个需要考虑的问题。相对而言,Myisam 崩溃后发生损坏的概论比INNODB 要高很多,而且恢复速度也很慢。因此,即使不需要事务支持,很多人也选择INNODB 引擎,这也是一个非常重要的因素。
特有的特性
最后,有些应用可能依赖一些存储引擎独有的特性或者优化,比如很多应用依赖聚簇索引的优化。另外mysql 中也只有myisam 支持地理空间搜索。如果一个存储引擎拥有一些关键的特性,同时又缺乏一些必要的特性,那么有时候不得不做折中的考虑,或者在架构设计上做一些取舍。某些存储引擎无法直接支持的特性,有时候通过变通也可以满足需求。
你不需要现在就做决定,本系列接下来会提供很多关于各种存储引擎优缺点的详细描述,也会讨论一些架构设计的技巧。一般来说,可能有很多选项你还没有意识到,等阅读完本系列回头再看这些问题可能有些帮助。如果无法确定,那么就使用InnoDB ,这个默认选择是最安全的,尤其是搞不清楚具体要什么的时候。
日志型应用如何选择引擎
假如你需要实时地记录一台中心电话交换机的每一通电话日志到mysql中,或者通过Apache的mod_log_sql 模块将网站的所有访问信息直接记录到表中。这一类应用的插入速度有很高的要求,数据库不能成为瓶颈,MYISAM或者Archive存储引擎对这类应用比较适合,因为他们成本开销低,而且插入速度非常快。
如果需要对记录的日志做分析报表,则事情就会变得有趣 了。生成报表的sql很有可能会导致插入效率降低,这时候怎么办?
一种解决方法:是利用mysql内置的复制方案将数据复制一份到备份库,然后在备份库执行比较好事和cpu的查询。这样主库只用于高效的插入工作,而备份库上执行的查询也无需担心影响到日志的插入性能。当然也可以在系统负载较低的时候执行报表查询操作,但是应用在不断变化,如果依赖这个策略可能以后会导致问题。
另外一种方法: 在日志记录表的名字中包含年月的信息,比如web_logs_2015_11或者web_logs_2015_jan。这样可以在已经没有插入操作的历史表上做频繁的查询操作,而不会干扰到最新的当前表上的插入操作。
只读或者大部分情况下只读的表
有些表的数据用于编制类目或者分裂清单(如工作岗位,竞拍,不动产等)这些应用场景是典型的读多写少的业务。如果不介意MyISAM 的崩溃恢复问题,选择MyISAM 引擎是合适的。不过不要低估崩溃恢复问题的重要性,有些存储引擎不会保证将数据安全的写入磁盘中,而许多用户实际上并不清楚这样有多大的风险(MyISAM 只将数据写到内存中,然后等待操作系统定期的将数据刷出到磁盘上)。
tips:一个值得推荐的方式,是在心梗测试环境模拟真实环境,运行应用,然后拔下电源模拟崩溃测试。对崩溃恢复的第一手测试经验是无价之宝,可以避免真的崩溃时手足无措。
不要轻易相信 ‘MYISAM 比 INNODB 快’之类的经验之谈,这个结论往往不是绝对的。在很多我们已知的场景中,INNODB 的数度都可以让MYISAM 望尘莫及,尤其是用到聚簇索引,或者需要访问的数据都可以放入内存的应用。在后面的章节,读者可以了解更多影响存储引擎性能的因素(如数据大小,io请求量,主键还是二级索引等)以及这些因素对应用的影响。
当设计上述类型的应用时,建议蚕蛹InnoDB 。MyISAM 引擎在一开始可能没有任何问题,但是随着应用压力的上升,则可能迅速恶化。各种锁征用、崩溃后的数据丢失问题都会随之而来。
订单处理
如果设计订单处理,那么支持事务就必须选择。半完成的订单无法吸引应用的用户。另外一个重要的考虑点是存储引擎对外键的支持情况。InnoDB 是订单处理类应用的最佳选择。
电子公告牌和主题讨论论坛
对于mysql 的用户,主题讨论区是个很有意思的话题。当前有成百上千的基于php或者perl的免费系统可以支持主题讨论。其中大部分的数据库操作效率都不高,因为他们大多倾向于在一次请求中执行尽可能多的查询语句。另外还有部分系统设计为不采用数据库,当然也就无法利用到数据库提供的一些方便特性。主题讨论区一般都有更新计数器,并且为给个主题计算访问统计信息。多数应用只设计了几张表来保存所有的数据,所以核心表的读写压力可能非常大。为保证这些核心表的数据一致性,锁成为资源竞争的主要因素。
尽管有这些设计缺陷,但大多数应用在低负载时可以工作的很好。如果web站点的规模迅速扩展,流量随之猛增,则数据库访问可能变得非常慢。此时一个典型的解决方案是更改为支持更高读写的存储引擎,但有时用户会发现这么做反而导致系统变得更慢了。
用户可能没有意识到这是由于某些特殊的查询的缘故,典型的如:
SELECT COUNT(*) FROM table
问题在于,不是所有的存储引擎运行上述查询都非常快:对于MYISAM 确实会非常快,但其他的可能不行。每种引擎都能找出类似和对自己有利的例子。下一章将帮助用户分析这些情况,演示如何发现和解决存在的这类问题。
CD-ROM应用
如果要发布一个基于CD-ROM或者DVD-ROM并且使用mysql数据文件的应用,可以考虑使用MYISAM或者MYISAM压缩表,这样表之间可以隔离,兵器可以在不同介质上相互拷贝。MYISAM压缩表比未压缩表要节约很多空间,但压缩表是只读的。在某些应用中这可能是很大的问题。但如果数据放到只读戒指的场景下,压缩表的只读特性就不是问题了,这就没有理由不使用压缩表了。
大数据量
什么样的数据量算大?我们创建或者管理很多INNODB 数据库的数据量在3-5tb之间,或者更大,这是单台机器上的量,而不是一个分片(shard)的量。这些系统运行得还不错,要做到这一点需要合理的选择硬件,做好物理设计,并为服务器的io瓶颈做好规划。在这样的数据量下,如果采用myisam,崩溃后的恢复就是一个噩梦。
如果数据量持续增长到10tb以上级别,可能就要建立数据仓库。Infobright,是myslq数据仓库最成功的解决方案。也有一些大数据库不适合Infobright,却可能适合TokuDB.

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

10月8日消息,美国汽车市场正在经历一场引擎盖下的变革,以前备受喜爱的六缸和八缸动力发动机正逐渐失去统治地位,而三缸发动机则崭露头角。10月8日的消息显示,美国汽车市场正在经历一场引擎盖下的变革。过去备受喜爱的六缸和八缸动力发动机正在逐渐失去统治地位,而三缸发动机则开始崭露头角在大多数人的印象中,美国人钟情于大排量车型,而"美式大V8"一直是美国车的代名词。然而,根据外媒近期公布的数据,美国汽车市场的格局正在发生巨大变化,引擎盖下的战斗正愈演愈烈。据了解,在2019年之前,美

实时全局光照(Real-time GI)一直是计算机图形学的圣杯。多年来,业界也提出多种方法来解决这个问题。常用的方法包通过利用某些假设来约束问题域,比如静态几何,粗糙的场景表示或者追踪粗糙探针,以及在两者之间插值照明。在虚幻引擎中,全局光照和反射系统Lumen这一技术便是由Krzysztof Narkowicz和Daniel Wright一起创立的。目标是构建一个与前人不同的方案,能够实现统一照明,以及类似烘烤一样的照明质量。近期,在SIGGRAPH 2022上,Krzysztof Narko

黄院士在《赛博朋克2077》里搞的智能NPC,已经飙起中文了?量子位的一手体验,亲眼见证了NPC们流利地用中英双语对话,表情动作自然,口型也能对上……如果不是眼前就有一块屏幕,真的会有种身临其境之感。今年的CES展会上,英伟达用智能引擎AvatarCloudEngine(ACE),让游戏NPC“活”了起来,引起了不小的震撼。△CES上展示的智能NPC使用ACE,游戏中的角色可以与玩家进行逼真的语音对话,同时展现出生动的表情和肢体动作,而无需提前准备剧本。亮相当时,就有育碧、腾讯、网易、米哈游等国

Redmi官方今日宣布,全新RedmiGPro2024将于3月4日正式发布。也就是说,下周我们将迎来这款令人期待的新品发布。RedmiGPro2024以电竞旗舰身份全面登场,将手机产业能力深度融入笔记本业务,呈现210W超强性能释放,Redmi性能再创新高。搭载i9-14900HX处理器和RTX4060显卡,将电竞与创作完美结合,实现双重进化。就此来看,这款新品的性能表现将会再次提升,实际效果如何令人期待。官方预热中提到,全新RedmiGPro2024带来了狂暴引擎PC版。手机技术赋能,三大子引

解决SAS连接Oracle数据库时出现引擎问题,需要具体代码示例在使用SAS软件进行数据分析时,经常需要连接数据库来获取数据进行分析处理。而其中连接Oracle数据库是比较常见的操作。然而,有时候在连接Oracle数据库时会出现引擎问题,导致连接失败或者无法正常操作。本文将介绍如何解决在SAS软件中连接Oracle数据库时出现引擎问题的情况,并提供具体的代码

从ChatGPT横空出世的那天起,微软应该感到庆幸。除了庆幸自己几年前的10亿美元没白投之外。更重要的是,ChatGPT是友军,不是对手。而其他科技大厂的心情就很复杂了,尤其是微软的老对手谷歌。谷歌老员工、Gmail的创建者之一Paul Buchheit近日表示,像ChatGPT这样的人工智能聊天机器人将摧毁谷歌,就像当年搜索引擎彻底干掉黄页电话簿一样。至于时间,也就是这一两年的事。Buchheit周三在推特上说:「谷歌可能只需要一两年时间就会被彻底颠覆。AI将会消灭搜索引擎的结果页面,即使后

随着互联网技术的不断发展,网页模板引擎成为了网站开发中不可或缺的一部分。PHP网页模板引擎是其中一种常用的网页模板引擎。本文将介绍PHP网页模板引擎的使用方法及常见问题解答。一、什么是PHP网页模板引擎?PHP网页模板引擎是一种将网页设计与业务逻辑分离的技术。采用模板引擎的方式可以将网页的显示与逻辑处理分开,使得代码整洁清晰,易于维护。PHP网页模板引擎与原

连续两天,我们都在见证历史。硅谷大厂已经剑拔弩张,ChatGPT引爆的这一场搜索引擎大战,一触即发。前一天,谷歌发布了下一代对话AI系统Bard,紧随其后,微软在第二天官宣了新版必应和Edge的消息。现在,全新的必应Bing已经可以在Edge上体验了!虽然功能还比较有限。而微软市值,也在一夜间涨超800亿美元(约5450亿元人民币),达到五个月来新高。另一巨头谷歌也涨超4.6%,最新总市值1.38万亿美元,为四个月来新高。ChatGPT搜索正式诞生!北京时间今日凌晨,微软发布会在华盛顿雷德蒙德如
