目录
2.1.2. 顺序文件组织(Sequential File Organization).................................... 1
2.1.3. 多表聚簇文件组织(Multitable Clustering File Organization)............. 1
1950年以前 没有文件概念,数据不具有独立性,没有数据管理方面的软件,外部存储器只有磁带、卡片和纸带,没有磁盘等直接存取设备;
50年代后期到60年代早期 计算机从科学计算拓展到信息管理,数据量快速增加;
1964年,世界上第一个数据库系统IDS(Integrated Data Storage);
1968年,世界上第一个层次数据库IMS(Information Management System)诞生于IBM;
1970年,IBM的研究员Edgar F.Codd提出关系数据模型;
1974年,IBM推出关系模型的原型系统System R,同年IBM的Ray Boyce和Don Chamberlin提出SQL;
1976年,Peter Chen提出实体关系模型(Entity-Relationship Model,E-R Model;
1979年,第一个商业数据库Oracle Release 1诞生;
1989年,Postgres发布第一个版本,采用BSD版权;
1992年,SQL92国际标准草案形成;
1995年,Andrew Yu 和 Jolly Chen将Postgres增加SQL支持并开源到互联网上;
MySQL发布,开源数据库开始发展;
2000年代,非关系型数据库NoSQL开始盛行,主要包括4种类型:文档数据库、列簇式数据库、键值数据库、图数据库;
2003-2006年,Google发表了奠定了业界大规模分布式存储系统的理论基础的三篇论文:Google File System、Google MapReduce、Google BigTable;
2010年,图数据库Neo4j发布;
2011年,结合SQL和NoSQL的NewSQL概念出现;
2012年,全球第一个Global Database, Google Spanner诞生;
2016年,Amazon发表了代表性的云数据库Aurora;
2018年,Oracle发表自治数据库(Oracle Autonomous Database);
2019年,Google推出自学习数据库SageDB;
2019-2022年,clickhouse,doris等大数据实时数据库发布。
第一阶段:人工管理阶段 20世纪50年代中期以前,计算机主要用于科学计算,外部存储器只有磁带、卡片和纸带等,还没有磁盘等存储设备,同时,软件系统也只有汇编语言,还没有数据管理方面的软件,数据处理方式主要是批处理。此时的数据不易保存,没有文件的概念。数据不具有独立性。
第二阶段:文件系统阶段 20世纪50后代后期到60年代中期,计算机开始不仅仅用于科学计算,还用于信息管理方面。随着数据量的增加,数据的存储、检索和维护问题成为了紧迫的需要,数据结构和数据管理技术迅速发展起来。此时数据已经可以长期保存,由文件系统管理数据,文件的形式已经多样化,数据具有一定的独立性。
第三阶段:数据库管理系统阶段 20世纪60年代后期,数据管理技术进入数据库系统阶段。数据库系统克服了文件系统的缺陷,提供了对数据更高级、更有效的管理。这个阶段的程序和数据的联系通过数据库管理系统(DBMS)来实现。
第四阶段:大数据阶段 进入21世纪之后,随着数据量的爆发式增长,各类大数据处理技术也应运而生,从中催生了NoSQL和 NewSQL相关技术。
Organization of Records in Files(文件中记录的组织) 组织
块:每个文件分成定长的存储单元,称为块(block)。块是存储分配和数据传输的基本单元。大多数数据库默认4~8KB块大小。一个块含多条记录。 定长记录 文件头:在文件的开始处,分配一定数量的字节作为文件头(file header),包含有关文件的各种信息。
空闲列表 在文件头中存储被删除的第一个记录的地址,用这第一个记录来存储第二个可用记录的地址,依次类推。被删除的记录形成一条链表,称为空闲列表(free list)
插入:使用文件头所指向的记录,并改变文件头的指针以指向下一个可用记录。 如果没有可用空间,新记录添加到文件末尾。
变长记录 方式:采用以下方式: 多种记录类型在一个文件中存储 允许一个或多个字段是变长记录类型(varchar) 允许可重复字段的记录类型(数组、多重集合) 一条记录的结构 一条有变长度属性的记录中属性连续存储,通常具有两部分:初始部分是定长属性,接着是变长属性 变长属性在记录的初始部分表示为一个对(偏移量,长度),其中: 偏移量表示在记录中该属性的数据开始位置 长度表示变长属性的字节长度 null值表示:使用空位图 例:如果salary是空值,则该位图的第4个位置置1,存储在12-19字节的salary值被忽略 分槽的页结构 结构: 记录条目的个数 块中空闲的末尾处 每个记录的位置和大小 特点: 实际记录从块的尾部开始连续排列,块中的空闲空间是连续的 指针指向块头记有记录实际位置的条目,而不是直接指向记录 插入:在空闲空间的尾部给插入的记录分配空间,并且将包含此记录大小和位置的条目添加到块头中 删除:分两步: 它所占用的空间被释放,并且它的条目被设置成被删除状态 块中被删除记录之前的记录被移动,使得由删除产生的空闲空间被重用,并且所有空闲空间存在于块头数组的最后一个条目和第一个记录之间
顺序文件组织(Sequential File Organization)
目的:为了高效处理按某个搜索码的顺序的记录而设计的
搜索码:一个属性或者属性的集合,不一定是主码、超码 指针链管理: 通过指针把记录链接起来,指向搜索码下一条记录
删除:直接用指针跳过连接,并将删除部分加入空闲列表
插入:如果有空闲空间,则直接插入;如果没有,则将记录插入到溢出块中;两操作都通过指针实现
注意:需要不时地重新组织文件以恢复顺序;文件重组时,重组代价高
多表聚簇文件组织(Multitable Clustering File Organization)
目的:为高效执行连接操作设计
缺点:处理其他类型查询变慢
组织:用指针把这个关系的所有记录链接起来
发送
加锁可以非常完美的保证隔离性,但是会造成数据库性能的大大下降。所以视操作不同,事务管理分为了不同的情况。
a.如果两个事务并发的修改则必须隔离开。
b.如果两个事务并发的查询则完全不用隔离。
c.如果一个事务修改,另一个事务查询,则可能出现脏读、不可重复读、幻读的情况,隔离级别主要针对这种情况。
1.脏读:一个事务读取到另一个事务未提交的数据。
2.不可重复读:一个事务读取到另一个事务已经提交的数据。例如事务A读取了一条记录,此时事务B修改了该条数据并提交成功,事务A再次查询该条数据发现与第一次读取的不一样,即为不可重复度(同一个事务内重复读取的数据不一样,则理解成不可重复读)。
幻读:一个事务读取到另一个事务已经提交的数据,但与不可重复读不同的是,不可重复读的原因在于update,而幻读源于其他事务 insert 或 delete 了记录导致记录条数不一致。
版权声明:本文为CSDN博主「纯洁的小魔鬼」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/xyy1028/article/details/106165503
MVCC实现原理
https://blog.csdn.net/jinwufeiyang/article/details/119578180
MySql事务隔离机制