Mysql引擎 Innodb和MyISAM的区别

Mysql引擎 Innodb和MyISAM的区别,第1张

MYISAM 表是典型的数据与索引分离存储,主键和二级索引没有本质区别。比如在 MYISAM 表里主键、唯一索引是一样的,没有本质区别。

MYISAM 表的索引存储方式最大的缺点没有按照物理数据行顺序存储,这样无论对主键的检索还是对二级索引的检索都需要进行二次排序。

INNODB 表本身是索引组织表,也就是说索引就是数据。下图表T1的数据行以聚簇索引的方式展示,非叶子节点保存了主键的值,叶子节点保存了主键的值以及对应的数据行,并且每个页有分别指向前后两页的指针。

INNODB 表不同于 MYISAM,INNODB 表有自己的数据页管理,默认 16KB。MYISAM 表数据的管理依赖文件系统,比如文件系统一般默认 4KB,MYISAM 的块大小也是 4KB,MYISAM 表的没有自己的一套崩溃恢复机制,全部依赖于文件系统。

INNODB 表这样设计的优点有两个:

1 数据按照主键顺序存储。主键的顺序也就是记录行的物理顺序,相比指向数据行指针的存放方式,避免了再次排序。

2 两个叶子节点分别含有指向前后两个节点的指针,这样在插入新行或者进行页分裂时,只需要移动对应的指针即可。

但是也有缺点:

1 二级索引由于同时保存了主键值,体积会变大。特别是主键设计不合理的时候,比如用 UUID 做主键。

2 对二级索引的检索需要检索两次索引树。第一次通过检索二级索引叶子节点,找到过滤行对应的主键值;第二次通过这个主键的值去聚簇索引中查找对应的行。

事务的:原子性、一致性、分离性、持久性原子性、一致性、分离性、持久性(1)原子性事务的原子性指的是,事务中包含的程序作为数据库的逻辑工作单位,它所做的对数据修改 *** 作要么全部执行,要么完全不执行

这种特性称为原子性

事务的原子性要求,如果把一个事务可看作是一个程序,它要么完整的被执行,要么完全不执行

就是说事务的 *** 纵序列或者完全应用到数据库或者完全不影响数据库

这种特性称为原子性

假如用户在一个事务内完成了对数据库的更新,这时所有的更新对外部世界必须是可见的,或者完全没有更新

前者称事务已提交,后者称事务撤消(或流产)

DBMS必须确保由成功提交的事务完成的所有 *** 纵在数据库内有完全的反映,而失败的事务对数据库完全没有影响

(2)一致性事务的一致性指的是在一个事务执行之前和执行之后数据库都必须处于一致性状态

这种特性称为事务的一致性

假如数据库的状态满足所有的完整性约束,就说该数据库是一致的

一致性处理数据库中对所有语义约束的保护

假如数据库的状态满足所有的完整性约束,就说该数据库是一致的

例如,当数据库处于一致性状态S1时,对数据库执行一个事务,在事务执行期间假定数据库的状态是不一致的,当事务执行结束时,数据库处在一致性状态S2

(3)分离性分离性指并发的事务是相互隔离的

即一个事务内部的 *** 作及正在 *** 作的数据必须封锁起来,不被其它企图进行修改的事务看到

分离性是DBMS针对并发事务间的冲突提供的安全保证

DBMS可以通过加锁在并发执行的事务间提供不同级别的分离

假如并发交叉执行的事务没有任何控制, *** 纵相同的共享对象的多个并发事务的执行可能引起异常情况

DBMS可以在并发执行的事务间提供不同级别的分离

分离的级别和并发事务的吞吐量之间存在反比关系

较多事务的可分离性可能会带来较高的冲突和较多的事务流产

流产的事务要消耗资源,这些资源必须要重新被访问

因此,确保高分离级别的DBMS需要更多的开销

(4)持久性持久性意味着当系统或介质发生故障时,确保已提交事务的更新不能丢失

即一旦一个事务提交,DBMS保证它对数据库中数据的改变应该是永久性的,耐得住任何系统故障

持久性通过数据库备份和恢复来保证

持久性意味着当系统或介质发生故障时,确保已提交事务的更新不能丢失

即对已提交事务的更新能恢复

一旦一个事务被提交,DBMS必须保证提供适当的冗余,使其耐得住系统的故障

这三者都是数据库事务的错误情况。

1、脏读:事务A读到了事务B未提交的数据。

2、不可重复读:事务A第一次查询得到一行记录row1,事务B提交修改后,事务A第二次查询得到row1,但列内容发生了变化。

3、幻读:事务A第一次查询得到一行记录row1,事务B提交修改后,事务A第二次查询得到两行记录row1和row2。

扩展资料

数据库的基本结构分三个层次,反映了观察数据库的三种不同角度。

以内模式为框架所组成的数据库叫做物理数据库;以概念模式为框架所组成的数据叫概念数据库;以外模式为框架所组成的数据库叫用户数据库。

1、物理数据层。

它是数据库的最内层,是物理存贮设备上实际存储的数据的集合。这些数据是原始数据,是用户加工的对象,由内部模式描述的指令 *** 作处理的位串、字符和字组成。

2、概念数据层。

它是数据库的中间一层,是数据库的整体逻辑表示。指出了每个数据的逻辑定义及数据间的逻辑联系,是存贮记录的集合。它所涉及的是数据库所有对象的逻辑关系,而不是它们的物理情况,是数据库管理员概念下的数据库。

3、用户数据层。

它是用户所看到和使用的数据库,表示了一个或一些特定用户使用的数据集合,即逻辑记录的集合。数据库不同层次之间的联系是通过映射进行转换的。

参考资料:

百度百科--数据库

初学数据库应该从以下几点进行学习:

一、编程语言基础

新手学大数据,首先要掌握基础的编程语言基础,比如Java、C++等,要初步掌握面向的对象、抽象类、接口及数据流及对象流等基础,如果有疑问,可以去网上搜索相关书籍,再结合自己的疑问去翻书,就能很快的熟悉了解数据库的基础技术原理。

二、Linux系统的基本 *** 作

Linux系统的基本 *** 作是大数据不可分割的一部分,企业的MySQL大数据的组件都是跑在linux环境下的,所以学会linux常用命令不能缺少,重点是要学习一下Linux环境的搭建,搭建平台,,能写shell程序就会更好了。

三、学习Hadoop架构设计

要学大数据,首先要了解的是如何在单台Windows系统上通过虚拟机搭建多台Linux虚拟机,从而构建Hadoop集群,再建立spark开发环境,环境搭建成功后在网上搜罗一些demo,sql脚本之类,直接动手敲进去一点一点体会。

四、采用机器学习模式

为了发挥出大数据的优势,提升你的办公效率,就需要实 *** 并应用其中的内容,必然也会涉及大量机器学习及算法,这能最大化的发挥出计算机的性能,也是大数据的优势所在。

想了解更多有关数据库的相关信息,推荐咨询达内教育。作为国内IT培训的领导品牌,达内的每一名员工都以“帮助每一个学员成就梦想”为己任,也正因为达内人的执着与努力,达内已成功为社会输送了众多合格人才,为广大学子提供更多IT行业高薪机会,同时也为中国IT行业的发展做出了巨大的贡献。

第一范式(1NF):每一个属性都是原子项,不可分割

INF中所述的不可分割,是指在可分割的情况下必须分割,这是在应用环境中来判断的,当属性是文档时,虽然文档有段落标记,但还是不应该分割。

第二范式:每个非主属性要完全函数依赖于候选键,或者是主键。

关键词是“完全依赖”,与“部分依赖”或“局部依赖”相对,如果候选键或主键由两个属性组成,非主属性不能只依赖与其中一个或部分属性。

比如:股票日行情表由股票代码、股票名称、日期、收盘价四个属性组成,这就违反了2NF,因为“股票名称”部分依赖于“股票代码”。

第三范式:所有非主属性对任何候选关键字都不存在传递依赖

关键词是“传递依赖”,如果非主属性通过另一个非主属性依赖主键,则是传递依赖。

比如:股票基本信息表由股票代码、股票名称、企业名称、所在地区、所在省份组成,其中“所在省份”依赖于所在地区,存在传递依赖。

-----------------------------------

几个相关术语:

超键(super key):在关系中能唯一标识元组的属性集称为关系模式的超键

候选键(candidate key):不含有多余属性的超键称为候选键

主键(primary key):用户选作元组标识的一个候选键称为主键

主属性(Prime Attribute):候选键中的属性称为主属性

非主属性(Non-Key Attribute):不包含在任何候选键中的属性称为非主属性。

对多张表进行 *** 作是需要事务的。

事务(Transaction)是访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。事务通常由高级数据库 *** 纵语言或编程语言(如SQL,C++或Java)书写的用户程序的执行所引起,并用形如begin transaction和end transaction语句(或函数调用)来界定。事务由事务开始(begin transaction)和事务结束(end transaction)之间执行的全体 *** 作组成。

程序的原子性指:整个程序中的所有 *** 作,要么全部完成,要么全部不完成,不可能停滞在中间某个环节。

原子性 *** 作:原子性在一个 *** 作是不可中断的,要么全部执行成功要么全部执行失败,有着“同生共死”的感觉。及时在多个线程一起执行的时候,一个 *** 作一旦开始,就不会被其他线程所干扰。

扩展资料:

redis的原子性:

Redis所有单个命令的执行都是原子性的,这与它的单线程机制有关;

Redis命令的原子性使得我们不用考虑并发问题,可以方便的利用原子性自增 *** 作 实现简单计数器功能;

redis 实现事务的原理:

批量 *** 作在发送 EXEC 命令前被放入队列缓存

收到 EXEC 命令后进入事务执行,事务中任意命令执行失败,其余的命令都不会被执行

在事务执行过程,其他客户端提交的命令请求不会插入到事务执行命令序列中

参考资料:

百度百科——acid

我们常常看见的网页开发中有静态网页和动态网页等两种,静态页面就是没有数据交互,数据是固定的,动态页面就是有服务器、数据库等作为工具,实时显示最新的数据。下面就以数据流相关知识介绍如下:

首先明确说明Kafka不是数据库,它没有schema,也没有表,更没有索引。

1它仅仅是生产消息流、消费消息流而已。从这个角度来说Kafka的确不像数据库,至少不像我们熟知的关系型数据库。

1、持久性(durability)

我们先从最容易的持久性开始说起,因为持久性最容易理解。在80年代持久性指的是把数据写入到磁带中,这是一种很古老的存储设备,现在应该已经绝迹了。目前实现持久性更常见的做法是将数据写入到物理磁盘上,而这也只能实现单机的持久性。当演进到分布式系统时代后,持久性指的是将数据通过备份机制拷贝到多台机器的磁盘上。很多数据库厂商都有自己的分布式系统解决方案,如GreenPlum和Oracle RAC。它们都提供了这种多机备份的持久性。和它们类似,Apache Kafka天然也是支持这种持久性的,它提供的副本机制在实现原理上几乎和数据库厂商的方案是一样的。

2、原子性(atomicity)

数据库中的原子性和多线程领域内的原子性不是一回事。我们知道在Java中有AtomicInteger这样的类能够提供线程安全的整数 *** 作服务,这里的atomicity关心的是在多个线程并发的情况下如何保证正确性的问题。而在数据库领域,原子性关心的是如何应对错误或异常情况,特别是对于事务的处理。如果服务发生故障,之前提交的事务要保证已经持久化,而当前运行的事务要终止(abort),它执行的所有 *** 作都要回滚,最终的状态就好像该事务从未运行过那样。举个实际的例子。

3、隔离性(isolation)

在传统的关系型数据库中最强的隔离级别通常是指serializability,国内一般翻译成可串行化或串行化。表达的思想就是连接数据库的每个客户端在执行各自的事务时数据库会给它们一个假象:仿佛每个客户端的事务都顺序执行的,即执行完一个事务之后再开始执行下一个事务。其实数据库端同时会处理多个事务,但serializability保证了它们就像单独执行一样。举个例子,在一个论坛系统中,每个新用户都需要注册一个唯一的用户名。

4、一致性(consistency)

最后说说一致性。按照Kelppmann大神的原话,这是一个很奇怪的属性:在所有ACID特性中,其他三项特性的确属于数据库层面需要实现或保证的,但只有一致性是由用户来保证的。严格来说,它不属于数据库的特性,而应该属于使用数据库的一种方式。坦率说第一次听到这句话时我本人还是有点震惊的,因为从没有往这个方面考虑过,但仔细想想还真是这么回事。比如刚才的注册用户名的例子中我们要求每个用户名是唯一的。这种一致性约束是由我们用户做出的,而不是数据库本身。数据库本身并不关心或并不知道用户名是否应该是唯一的。针对Kafka而言,这种一致性又意味着什么呢?Kelppmann没有具体展开,

希望能帮到你,谢谢!

以上就是关于Mysql引擎 Innodb和MyISAM的区别全部的内容,包括:Mysql引擎 Innodb和MyISAM的区别、数据库事务四大特性是什么、什么是脏读,不可重复读,幻读等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/9879434.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-02
下一篇2023-05-02

发表评论

登录后才能评论

评论列表(0条)

    保存