{eval=Array;=+count(Array);}
Mysql作为一款关系型数据库,其中优势之一,便是支持存储引擎可插拔。你可以结合具体的使用场景,来选择特定的存储引擎。比如你可以选择InnoDB或者MyISAM存储引擎。同时由于Mysql是一款开源数据库,你也可以根据Mysql自定义的预留存储引擎接口,自己开发实现新的存储引擎。
Mysql中,不同的存储引擎,都有各自的特点。Mysql数据库存储包括:InnoDB存储引擎、MyISAM存储引擎、NDB存储引擎、Memory存储引擎、Archive存储引擎等。
InnoDB存储引擎最大的特点,便是支持事务,行锁的设计,同时支持外键和MVCC。数据库中的事务表示一段最小可执行SQL逻辑。事务可以包含多个SQL语句,也可以是一个SQL语句组成。
事务执行中,要么全部执行成功,要么全部执行失败。事务的四个特性:原子性(事务是最小执行单位)、一致性(数据状态总是从一个一致性状态到另外一个一致性状态)、隔离性(事务之间是隔离的)、持久性。数据库事务经常会用在金融领域的场景,比如转账等。
所以,如果你的业务场景需要支持事务特性,那么你在使用Mysql时,需要选择InnoDB存储引擎来支持。InnoDB存储引擎目前在很多公司也用的比较广泛,比如Facebook、ucloud等。
MyISAM存储引擎不支持事务,它的最大的一个特点便是支持OLAP(联机分析场景)。公司业务方经常会有这样的需求,需要对数据进行聚合操作,比如对数据进行SUM(求和)、COUNT(计数)等指标类计算,对这部分数据分析,进一步分析数据的价值,为公司上层提供决策支持。此时Mysql数据库可以选择MyISAM存储引擎来支持。
Memory存储引擎会将数据存储到内存中,对于内存数据的访问,其速度很快。当然有一个问题,如果我们的数据库发生故障或者奔溃重启时,内存中的数据会全部消失。
所以对于Memory存储引擎,它适用的场景用于存储临时数据的临时表以及数据维表到内存中,也可以使用Memory存储引擎来存储SQL查询中的临时结果表。
对于Archive存储引擎,它非常适用于存储归档的数据,比如存储日志信息,这部分数据没有那么重要,对其进行压缩进一步降低磁盘的存储空间。
我是Lake,专注大数据技术原理、人工智能、数据库技术、程序员经验分享,如果我的问答对你有帮助的话,希望你能点赞关注我,感谢。
我会持续大数据、数据库方面的内容,如果你有任何问题,也欢迎关注私信我,我会认真解答每一个问题。期待您的关注
MySQL 是一个常见的开源免费多引擎的关系型数据库,各种适配器齐全,我们很容易就可以在项目中使用它。常见存储引擎有 InnoDB,MyISAM,MRG_MYISAM,BLACKHOLE ,MEMORY,PERFORMANCE_SCHEMA,ARCHIVE,CSV,,FEDERATED 等。
在 MySQL 5.5 版本之前中默认是 MyISAM 引擎,但到了 5.5+ 版本就默认使用 InnoDB 引擎,支持的引擎如下:
MySQL 5.5.62:
MySQL 5.6.24:
MySQL 5.7.27:
MySQL 8.0.17:
首先,就是要对这些存储引擎有一定的了解,才能在实际使用过程中针对性的选择最佳的引擎方案,最常用的引擎就是 InnoDB 和 MyISAM 两种,我们可以从是否支持行级锁,是否支持事务、是否支持外键,是否支持 MVCC,是否支持安全恢复、性能等角度去对比并结合项目的实际需求,选择最合适的存储方案。
InnoDB 支持原子性、一致性、隔离性、持久性的事务处理特性、同时支持外键,支持行级锁(row-level locking)和表级锁(table-level locking),默认是行级锁。而 MyISAM 只支持表级锁,不支持事务和外键。
MyISAM 查询性能比较好,提供全文索引、压缩、空间函数等,但是InnoDB 提供事务支持事务,外部键等高级数据库功能。 具有事务(commit)、回滚(rollback)和崩溃修复能力(crash recovery capabilities)的事务安全(transaction-safe (ACID compliant))型表。
仅 InnoDB 支持 MVCC。应对高并发事务, MVCC 比单纯的加锁更高效; MVCC 只在 READ COMMITIED 和 REPERATABLE READ 两个隔离级别下工作,MVCC 可以使用 乐观(optimistic)锁和悲观(pessimistic)锁来实现,各数据库中MVCC实现并不统一。
0
回答0
回答0
回答0
回答0
回答0
回答0
回答0
回答0
回答5
回答