如何设计一个关系型数据库
文章目录
- 如何设计一个关系型数据库
- 存储(文件系统)
- 程序实例
- 存储管理
- 缓存机制
- SQL解析
- 日志管理
- 权限划分
- 容灾机制
- 索引管理
- 锁管理
- 详细文字
- 如何设计一个关系型数据库?
- 文件系统
- 程序系统
- 存储管理模块
- 缓存模块
- SQL解析模块
- 日志数据。
- 权限划分
- 容灾恢复
- 【复习重点】索引模块 和 锁管理
存储(文件系统)
将系统持久化到存储设备当中
程序实例
对存储进行逻辑上的管理
存储管理
- 逻辑关系转换成物理关系
缓存机制
- 优化执行效率
SQL解析
- SQL进行解析
日志管理
- 记录操作
权限划分
- 多用户管理
容灾机制
- 灾难恢复
索引管理
- 优化查询效率
锁管理
- 数据库支持并发操作
详细文字
如何设计一个关系型数据库?
原文链接:https://blog.csdn.net/lucky_jiexia/article/details/105356483
文件系统
数据库最主要的功能是存储数据,因此有一个存储模块存储数据。存储模块类似OS文件系统,将数据持久化存入磁盘中,如存入机械硬盘、SSD固态硬盘、亦或者是它们的磁盘阵列矩阵中。
程序系统
但是只有存储是不行的,还需要组织并且用到这些数据,因此需要有程序的实例,用逻辑结构来映射出物理结构,并且在程序中提供获取和管理数据的方式,以及提供必要的问题追踪机制。
细分程序模块:
存储管理模块
1)数据逻辑关系转换成物理存储关系的存储管理模块:首先对数据的格式和文件的分隔进行统一的管理,即把物理数据通过逻辑的形式组织表示出来,便涉及到程序的存储管理模块。(优化存储效能:处理数据不在磁盘上做,而是加载到程序空间所在内存里,磁盘IO速率是程序执行速率的主要瓶颈,远差于内存的执行效率。为了执行效率,要尽可能减少IO。就存储管理而言,如果按照逐行查找并返回,频繁的IO会使数据库的执行效率慢。因为一次IO读取单条数据和多条数据没有太大的区别,所以可以一次性的读取多行,以提升IO的效能。行就失去了意义,数据以块和页作为逻辑存储单位,每个块和页中存放多行数据,读取的时候将多个块和页加载进内存中。)
缓存模块
2)优化执行效率的缓存模块:为了更快更好的优化利用内存,可以利用缓存机制,把取出来的数据块放进缓存里,下次需要的时候直接从内存返回,而不用发生IO。一次性加载多个模块或者页,块里包含的数据行有数据可能不是我们本次查询需要的行,但是一旦某行数据被访问了,它周围的数据也极有可能被访问的经验,缓存的非本质数据也能起到优化访问效率的作用,提升访问的性能。管理缓存的方法有LRU等。
SQL解析模块
3)将SQL语句解析的SQL解析模块:提供外部指令操纵数据,即可读的SQL语言,需要SQL解析模块将SQL编译解析,转换成机器可识别的指令。这时为了进一步提升SQL的执行效率,将SQL缓存到缓存里直接解析。缓存不宜过大,且有算法里淘汰机制,淘汰掉之后不常用的
日志数据。
4)记录操作的日志管理模块:SQL操作需要记录下来,方便数据库的主从同步或者灾难恢复,因此需要日志管理对操作进行记录,如binlog的记录方式。
权限划分
5)多用户管理的权限划分模块:还需要提供给用户管理数据的私密空间,即权限划分。通俗将就是老板可以看到员工的数据,员工只能看到自己该看到的数据。权限划分是DBA做的。
容灾恢复
6)灾难恢复模块:除了考虑正常情况,还需考虑异常情况,需要引入异常机制,即容灾机制。当数据库挂了如何恢复,恢复到什么程度。
【复习重点】索引模块 和 锁管理
7)优化数据查询效率的索引模块和使得数据库支持并发操作的锁模块:为了进一步提升查询数据的速度以及让数据库支持并发,需要引入索引和锁模块。