数据库的存储原理
在数据库管理系统中,数据的存取过程为:
- 应用程序通过 DML 向 DBMS 发出存取请求,如 SELECT 语句;
- 对命令进行语法检查,正确后检查语义和用户权限(通过数据字典 DD),并决定是否接收;
- 执行查询优化,将命令转换成一串单记录的存取操作序列;
- 执行存取操作序列;
- 在缓冲区中找记录,若找到转 10,否则转 6;
- 查看存储模式,决定从哪一个文件,用什么方式读取物理记录;
- 根据 6 的结果向操作系统(OS)发出读取记录的命令;
- OS 执行该命令,并读取记录数据;
- 在 OS 控制下,将读出的记录送入系统缓冲区;
- RDBMS 根据查询命令和 DD 的内容导出用户所要读取的记录格式;
- RDBMS 将数据从系统缓冲区中送入用户工作区;
- RDBMS 将执行状态信息(成功或失败)返回给应用程序;
- 应用程序对工作区中读出的数据进行相应处理。
数据库用文件的方式来存储数据。文件在逻辑上可看作是记录的序列,物理上这些记录被映射到磁盘块中。
当一条记录被删除时,可以把紧跟其后的记录移到被删记录的位置,以此类推,直到被删记录后面的每一条记录都向前做了移动。
但这种方法需要移动大量的记录,并不理想。所以可以暂时让被删除记录的空间一直空着,等待随后插入的记录使用这个空间。但仅在被删记录上做一个删除标记是不够的,因为当插入操作执行时,要找到这个可用空间比较困难,解决方法是引入额外的结构。
在文件的开始处,分配一定数量的字节作为文件头,文件头中存储有关文件的各种信息,也记录了第一条被删除的记录。再在第一条被删除记录的后面记录第二条被删除记录,这样就形成了一条链表,称为空闲链表。
文件中存储记录的常用方法有:堆文件组织,顺序文件组织,多表聚集文件组织,B+ 树文件组织和散列文件组织(后两种多用于索引记录)等。
一条记录可以放在文件中的任何地方,只要那个地方有空间存放记录。也就是说,文件中的记录是没有顺序的,是堆积来的。
顺序文件是为了高效地按某个搜索码值的顺序有序处理记录而设计的(搜索码是一个属性或属性集合,他不一定是主码甚至是超码)。为了快速地按搜索码值得顺序获取记录,通常通过指针将文件块逻辑上有序地连接起来。每个文件块的指针指向搜索码值顺序的下一个文件块(链表形式)。同时,为了减少顺序文件处理中文件块的访问数量,在物理上按搜索码值的顺序或者尽可能的接近搜索码值的顺序存储文件块。
顺序文件组织对于那些按搜索码值有序的特定查询非常有效,然而在插入和删除记录时为了维护记录的物理顺序却十分困难。改进操作:
- 插入操作:在文件中按搜索码值定位到待插入记录的文件块。
- 如果文件块 A 中有空闲空间,就在该文件中定位插入记录的位置,并插入新的记录;
- 否则申请一个溢出文件块,将文件块 A 中的记录平分一半到溢出文件块中,并将待插入记录插入到文件块 A 或溢出文件块中,再调整指针,使其能按搜索码值的顺序把文件块连接起来。
- 删除操作:在文件中按搜索码值定位待删除记录所在的文件块。在文件块 A 中定位待删除记录并实施删除(需要在文件块内向前移动删除记录之后的原有记录,使文件块内的空闲空间位于块尾)。如果删除后记录太少,
- 可考虑将文件块 A 的记录移到文件块所连接的文件块中,并释放 A 的空间。
- 可考虑从文件块 A 所连接的文件块中移出一部分记录到 A 中。
通常,在小型数据库管理系统中,每个关系的所有记录存储在一个单独的定长记录的文件中,这样可以充分利用操作系统所提供的文件系统功能,简化 DBMS 的设计。
然而,很多大型数据库管理系统在文件管理方面并不直接依赖操作系统,而是让操作系统分配给 DBMS 一个大的操作系统文件,DBMS 将所有关系存储在这个文件中,并且自己管理这个文件。
多表聚集文件组织是一种在每一个文件块中存储两个或多个关系的相关记录的文件结构。这种结构将多个关系的元组(行)混合在一起聚集存储,从而支持高效的连接运算。
例:
- 当 Student 表和 Score 表根据 studentNo 进行连接运算时,DBMS 会将 Score 表中所有 studentNo 值相同的元组(行)聚集地存储在 Student 表中对应元组的附近。
- 当读取 Student 表中的一个元组 t(行),包含元组 t 的整个文件块已经从磁盘中读取到主存储器中。由于 Score 关系中所有与元组 t 具有相同 studentNo 值得元组已聚集在元组 t 附近,所以已读入主存中包含元组 t 的文件块中也将包含 Score 表中与元组 t 相匹配的元组。
数据库的分类以及作用
数据库可以分为多种类型,不同类型的数据库具有不同的特点和适用场景,其主要作用是存储、管理和检索数据。以下是常见的数据库分类及其作用:
一、关系型数据库
- 定义:关系型数据库是建立在关系模型基础上的数据库,它通过表之间的关系来组织数据。
- 常见产品:MySQL、Oracle、SQL Server、PostgreSQL 等。
- 特点:数据以表格的形式存储,表格由行和列组成,每行代表一条记录,每列代表一个属性。支持 SQL(Structured Query Language,结构化查询语言),这是一种标准化的语言,用于查询、插入、更新和删除数据。提供事务处理功能,确保数据的一致性和完整性。例如,在银行系统中,从一个账户向另一个账户转账时,必须确保整个操作要么完全成功,要么完全失败,不能出现部分成功的情况。具有较高的数据一致性和可靠性,适合存储结构化数据。例如企业的、订单数据等。
- 作用:企业管理:用于存储企业的各种业务数据,如、订单信息、库存信息等,帮助企业进行数据分析和决策。金融领域:存储交易记录、客户账户信息等,确保数据的准确性和安全性。电子商务:管理商品信息、用户订单、购物车数据等,为用户提供个性化的购物体验。
二非关系型数据库(NoSQL 数据库)
- 定义:非关系型数据库不使用传统的关系模型,而是采用不同的数据存储和查询方式。
- 分类及常见产品:键值存储数据库:如 Redis、Memcached。以键值对的形式存储数据,其中键是唯一的标识符,值可以是任何数据类型。文档数据库:如 MongoDB。以文档的形式存储数据,每个文档可以包含不同的字段和结构,适合存储半结构化数据。列存储数据库:如 HBase。将数据按照列进行存储,适合处理大规模的数据分析和查询。图形数据库:如 Neo4j。用于存储和查询图形数据,适合处理复杂的关系网络。
- 特点:灵活性高:可以存储不同结构的数据,无需预先定义表格结构。可扩展性强:能够轻松应对大规模数据和高并发访问。性能高:通常采用分布式架构,能够快速读写数据。
- 作用:大数据处理:在处理海量数据时,非关系型数据库能够提供高效的存储和查询性能。例如,互联网公司可以使用 HBase 来存储和分析用户行为数据。实时应用:Redis 等键值存储数据库可以用于缓存数据,提高应用的响应速度。在电商网站中,可以将热门商品信息缓存到 Redis 中,减少对数据库的访问压力。社交网络分析:图形数据库适合存储和分析社交网络中的关系数据。例如,分析用户之间的关注关系、朋友圈关系等。
三、面向对象数据库
- 定义:面向对象数据库是一种以面向对象编程语言为基础的数据库系统,它将数据和操作封装在对象中。
- 特点:支持面向对象的编程概念,如继承、多态、封装等。可以存储和管理复杂的对象结构,适合存储具有复杂关系的业务数据。
- 作用:工程设计领域:存储和管理 CAD/CAM 系统中的设计数据,如三维模型、工程图纸等。地理信息系统:存储和查询地理空间数据,如地图数据、地形数据等。
四、层次数据库
- 定义:层次数据库以层次结构组织数据,数据之间的关系类似于树形结构。
- 特点:数据结构简单,易于理解和实现。适合存储具有层次关系的数据,如组织机构图、文件系统等。
- 作用:企业组织架构管理:存储企业的部门结构、人员关系等信息。文件系统管理:早期的操作系统中常使用层次数据库来管理文件系统。
五、网状数据库
- 定义:网状数据库以网状结构组织数据,数据之间的关系更加复杂,可以有多个父节点和子节点。
- 特点:能够表示复杂的多对多关系。灵活性高,但数据结构复杂,查询和管理相对困难。
- 作用:复杂业务系统:在一些需要处理复杂关系的业务系统中,如物流管理系统、供应链系统等,可以使用网状数据库来存储和管理数据。
总之,不同类型的数据库在数据存储、管理和查询方面具有各自的优势和适用场景。在选择数据库时,需要根据具体的业务需求、数据特点和性能要求来进行综合考虑。
数据库|数据库存储过程相关学习
哈喽,你好啊,我是雷工!
前面学习记录了数据库中,这里接着学习记录数据库中存储过程的相关内容。
以下为学习笔记。
数据库存储过程是一组为了完成特定功能的SQL语句集,它们被编译并存储在数据库中。
存储过程可以接受输入参数、返回输出参数、返回结果集,并且可以在数据库中直接调用。
存储过程的使用在数据库管理和开发中非常普遍,因为它们具有多种优点,如提高性能、代码重用、安全性和减少网络流量等。
注意:
如果仅仅是查询,建议使用视图,特别是针对不同的角色调用不同权限的数据时,使用视图是非常方便的。
存储过程的主要特点有以下几个:
2.1、预编译和存储
存储过程在第一次调用时被编译并存储在数据库中,之后的调用可以直接执行预编译的代码,从而减少编译时间。
2.2、参数化
存储过程可以接受输入参数和返回输出参数,这使得存储过程非常灵活,可以处理不同的输入情况。
2.3、返回值
除了返回输出参数外,存储过程还可以返回结果集(类似于SQL查询的结果),这使得它们非常适用于检索数据。
2.4、事务控制
存储过程中可以包含事务控制语句确保数据库操作的原子性和一致性。
2.5、安全性
存储过程可以限制直接访问数据库表的权限,用户只能通过存储过程来操作数据,从而提高了数据库的安全性。
2.6、代码重用
存储过程可以被多次调用,避免了重复编写相同的SQL代码,提高了代码的重用性和可维护性。
2.7、减少网络流量
由于存储过程在服务器端执行,只传递调用存储过程的请求和结果,减少了客户端和服务器之间的数据传输量,从而节约网络流量。
03 后记
关于数据库存储过程这里这是学习概念,看视频教学操作,未做实际练习,后续在实际项目中再实际应用。
本文作者及来源:Renderbus瑞云渲染农场https://www.renderbus.com
文章为作者独立观点不代本网立场,未经允许不得转载。