mysql面试经典问题:如何设计一个关系型数据库

模块划分能力

relational database management system

在这里插入图片描述

底层需要一个存储模块(文件系统)

我们还需要组织并使用这些数据,因此需要有程序实例。用逻辑结构来映射出物理结构来,并且在程序中提供获取以及管理数据的方式,以及必要的问题追踪机制。

接下来来细分一下程序的模块。

首先,需要对数据的格式以及文件的风格进行统一的管理,即把物理数据通过逻辑的形式给组织并表示出来。于是便涉及到了程序的存储管理模块。

1. 存储管理模块

我们应该如何优化存储效能?处理数据不能在磁盘上做,肯定是让程序加载到程序空间所在的内存中去做,磁盘IO速率往往是程序执行速度的主要瓶颈。

因为你一次查询一行与一次查询多行,对磁盘IO的使用差不多,所以数据库并不是使用行 作为其存储单位,而是使用块 或者 页 作为其逻辑存储单位。每个块或者页存储多行数据,这样在读取数据的时候,就可以把多个块一起加载到内存中

2. 缓存机制

为了更快、更好的优化我们的程序,要引入缓存机制。下次直接从内存中返回,而不用发生I/O操作。

3. sql解析模块

还需要能提供给外部指令,来操作我们的数据库,即可读的sql语言,那么我们需要一个sql解析模块,来将我们的sql编译、解析,转变为机器可识别的指令。这个时候如果想提高我们sql执行的效率,怎么办?还是将sql缓存到我们的缓存中,把sql编译好,方便下次过来直接进行解析。

可以看到,我们在设计程序的时候,要先考虑功能,然后再进行性能优化。

要注意:我们的缓存不宜过大,而且算法里面要有淘汰机制。

4. 日志管理

做的sql操作,需要记录下来,方便我们做数据库的主从同步,或者灾难恢复。因此需要日志管理办法,如binlog

在这里插入图片描述

5. 权限划分

对操作进行权限划分

6. 容灾机制

设计系统的时候除了考虑正常的情况,也要考虑异常的情况,那就是容灾机制

对性能提升,最重要的两个模块

7. 索引管理

优化数据查询效率

8. 锁管理

数据库支持并发操作

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值