MySQL系列(十二)--如何设计一个关系型数据库(基本思路)

  设计一个关系型数据库,也就是设计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优化、索引、行锁、表锁等

 

posted @ 2019-08-11 14:44  Diamond-Shine  阅读(810)  评论(0编辑  收藏  举报