数据库引擎
1. 什么是数据库引擎
数据库引擎:用于存储、处理、保护数据的核心服务。
当你访问数据库时,不管是手工访问,还是程序访问,都不是直接读写数据库文件,而是通过数据库引擎去访问数据库文件
2. 数据库引擎有几种
Innodb 、 MyISAM 、MEMORY 、MERGE
3.myisam 和innodb的区别 5+3
InnoDB 提供事务支持,具有提交(commit)和回滚(rollback)事务的能力。 myisam不是
innodb 支持行级锁(row-level locking)和表级锁,默认为行级锁 ,myisam锁粒度是表级的
innodb 支持外键/mvcc,myisam 不行
使用 InnoDB 的数据库在异常崩溃后,数据库重新启动的时候会保证数据库恢复到崩溃前的状态。这个恢复的过程依赖于 redo log,myisam 不行
myisam更简单 ,效率上优于innodb ,小型应用考虑使用myisam
myisam表保存为文件的形式,在跨平台的数据转移中使用myisam会更方便
补充:MyISAM 引擎和 InnoDB 引擎都是使用 B+Tree 作为索引结构,但是,两者的实现方式不太一样
MyISAM 引擎中,B+Tree 叶节点的 data 域存放的是数据记录的地址。在索引检索的时候,首先按照 B+Tree 搜索算法搜索索引,如果指定的 Key 存在,则取出其 data 域的值,
然后以 data 域的值为地址读取相应的数据记录。这被称为“非聚簇索引”
InnoDB 引擎中,其数据文件本身就是索引文件。相比 MyISAM,索引文件和数据文件是分离的,其表数据文件本身就是按 B+Tree 组织的一个索引结构,树的叶节点 data 域保存了完整的数据记录。
这个索引的 key 是数据表的主键,因此 InnoDB 表数据文件本身就是主索引。这被称为“聚簇索引(或聚集索引)”
而其余的索引都作为辅助索引(二级索引),辅助索引的 data 域存储相应记录主键的值而不是地址,这也是和 MyISAM 不同的地方。
在根据主索引搜索时,直接找到 key 所在的节点即可取出数据;在根据辅助索引查找时,则需要先取出主键的值,再走一遍主索引。
因此,在设计表的时候,不建议使用过长的字段作为主键,也不建议使用非单调的字段作为主键,这样会造成主索引频繁分裂
应用场景
4 对MySQL InnoDB的认识
特点是:
1、具有较好的事务支持:支持4个事务隔离级别,支持多版本读
2、行级锁定:通过索引实现,全表扫描仍然会是表锁,注意间隙锁的影响
3、读写阻塞与事务隔离级别相关
4、具有非常高效的缓存特性:能缓存索引,也能缓存数据
5、整个表和主键以Cluster方式存储,组成一颗平衡树
6、所有Secondary Index都会保存主键信息
适用场景:
1、需要事务支持(具有较好的事务特性)
2、行级锁定对高并发有很好的适应能力,但需要确保查询是通过索引完成
3、数据更新较为频繁的场景
4、数据一致性要求较高
5、硬件设备内存较大,可以利用InnoDB较好的缓存能力来提高内存利用率,尽可能减少磁盘IO
事务表和非事务表
什么是事务表呢
事务表就是可以进行事务回滚操作, InnoDB是一种数据库存储引擎.他是事务型数据库的首选引擎,支持ACID事务,支持行级锁定。InnoDB是为处理巨大数据量时的最大性能设计。
InnoDB存储引擎完全与MySQL服务器整合,InnoDB存储引擎为在主内存中缓存数据和索引而维持它自己的缓冲池。
什么是非事务表
Nontransactional Tables,非事务表,不支持事务的表,也就是使用MyISAM存储引擎的表。
非事务表的特点是不支持回滚
关系型数据库(如mysql)与非关系型数据库(如Redis)的区别
https://blog.csdn.net/xyphf/article/details/82832936
1.不同的数据存储方法。
关系数据库和非关系数据库之间的主要区别在于数据的存储方式。关系数据自然采用表格格式,因此存储在数据表的行和列中。数据之间有关系,擅长复杂的SQL操作
可以方便的生成各种数据对象,利用存储的数据建立窗体和报表,可视化较好
相反,非关系数据不适合存储在数据表的行和列中,而是按大块分组在一起。非关系数据通常存储在数据集中,例如文档,键值对或图形结构。
适合处理海量数据。尤其是在做高并发业务的时候
如 Mongodb 存储在磁盘,快速的查询响应
数据结构变更或更新非常方便,不需要更改已有数据的数据结构
2.存储扩展
这可能是两者之间最大的区别,关系型数据库是纵向扩展,也就是说想要提高处理能力,要使用速度更快的计算机。因为数据存储在关系表中,操作的性能瓶颈可能涉及到多个表,需要通过提升计算机性能来克服。虽然有很大的扩展空间,但是最终会达到纵向扩展的上限。而Nosql数据库是横向扩展的,它的存储天然就是分布式的,可以通过给资源池添加更多的普通数据库服务器来分担负载
3.对事务的支持是不同的。
关系型数据库遵循ACID规则 由于关系型数据库的数据强一致性,所以对事务的支持很好。关系型数据库支持对事务原子性细粒度控制,并且易于回滚事务。
而Nosql数据库 所以对事务的支持不是很好
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
2021-02-24 CNN的参数量和计算量