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

最新文章

  1. 使用Solr索引MySQL数据
  2. HTML5小游戏之见缝插针
  3. Ajax调用处理页面错误信息500的解决思路
  4. Linux Linux程序练习十八
  5. TP框架自带的正则验证的规则(转载)
  6. Action处理请求参数
  7. AX2009按照批次生产日期预留
  8. python之字符聊天小工具
  9. scala偏函数
  10. SqlSever基础 Upper函数 返回字符串的大写形式
  11. apache如何在虚拟主机中实现用户验证
  12. 使用ConcurrentDictionary实现轻量缓存
  13. python写zip破解器
  14. hibernate二级缓存demo2
  15. 主动收入VS被动收入
  16. Android Studio 活动启动模式
  17. Maven 的安装与配置
  18. jquery判断checkBox的checked
  19. _ai_creature
  20. Visual Studio 2013安装及简单的单元测试

热门文章

  1. 记录一次像github开源项目提交pull request(Hexo Next)
  2. iOS开发系列-打印内存地址
  3. 数据库MySQL--常见基础命令
  4. springboot+mybatis 非web项目构建
  5. java反射快速入门
  6. 0917CSP-S模拟测试赛后总结
  7. hadoop高可用HA的配置
  8. 运用shtml类型文件,实现项目页面的分割。
  9. 后缀自动机XJ
  10. C# GZipStream 压缩 解压