zoukankan      html  css  js  c++  java
  • 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优化、索引、行锁、表锁等

  • 相关阅读:
    散列算法
    【转】认证 (authentication) 和授权 (authorization) 的区别
    Filter和interceptor比较
    【转】深入理解Spring的两大特征(IOC和AOP)
    [转]web.xml中servlet ,filter ,listener ,interceptor的作用与区别
    线程同步
    Java容器
    进程间交互的几种方式
    JSP和Servlet的区别
    IPC介绍
  • 原文地址:https://www.cnblogs.com/huigelaile/p/11334988.html
Copyright © 2011-2022 走看看