设计一个关系型数据库,也就是设计RDBMS(Relational Database Management System),这个问题考验的是对RDBMS各个模块的划分,
以及对数据库结构的了解。只要讲述基本模块设计思路就可以了,当然如果你能讲的比较细更好。
基本机构:
文件存储系统:
对数据库对重要的就是数据存储,相当于OS的文件系统,将数据进行持久化,例如存储到磁盘
程序实例:
有了存储系统肯定是不够的,我们需要去用这些数据,这时候就要依靠程序了
存储管理:
用逻辑结构映射出物理结构,我们需要把数据读取到程序相关的内存中,数据处理不可能在硬盘中处理,因为无论是机械硬盘还是固态硬盘相对于内存
的处理速度相差了不只一个量级。保存数据一般采用的块或者页,在MySQL中我们常常提到使用Page保存数据,以page为基本单位的。
缓存机制:
当page中的数据被加载到内存中,为了提高效率,就需要缓存机制。当查询主键为10的数据,page加载到内存时,会包含周围类似的数据,他们被访问
的概率也很大。
当然还要考虑缓存失效、更新策略等
SQL解析:
我们需要向用户提供DL,包含DDL、DML、DCL,用来操作数据。而SQL解析模块会把SQL解析为机器码能够让操作系统识别,解析过后的SQL也可以
被缓存
日志管理:
对于数据库的操作需要记录下来,这时候就需要日志管理模块。例如MySQL中二进制日志、通用日志、慢查日志等
权限划分:
权限划分也是很重要的,总不能DBA的权限和你的权限一样吧,那你不是要上天了?
容灾机制:
应用一旦发生异常,如何进行恢复,恢复到什么程度,这就是容灾
索引管理:
索引对于关系型数据库的重要性不言而喻,记得刚开始结构数据库,提到SQL优化就会想到加索引23333.
需要考虑索引使用哪种数据结构,二叉搜索树?红黑树?B树?B+树?Hash?
锁:
锁也是很重要的模块,保证并发操作的安全等
总结:
本文只是一个基本思路,设计关系型数据库和我们平常的项目都是相同的,都是包含不同的模块,把基本思路回答了就可以了,面试官就可以根据这些
不同模块继续问下去,binlog、慢查询、SQL优化、索引、行锁、表锁等