如何设计一个关系型数据库

2021-04-14 14:54:19 浏览数 (1)

如何设计一个关系型数据库

文章目录

  • 如何设计一个关系型数据库
    • 存储(文件系统)
    • 程序实例
      • 存储管理
      • 缓存机制
      • 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)优化数据查询效率的索引模块和使得数据库支持并发操作的锁模块:为了进一步提升查询数据的速度以及让数据库支持并发,需要引入索引和锁模块。

0 人点赞