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优化、索引、行锁、表锁等
MySQL系列(十二)--如何设计一个关系型数据库(基本思路)的更多相关文章
- 打开order by的大门,一探究竟《死磕MySQL系列 十二》
在日常开发工作中,你一定会经常遇到要根据指定字段进行排序的需求. 这时,你的SQL语句类似这样. select id,phone,code from evt_sms where phone like ...
- BizTalk开发系列(十二) Schema设计之Group与Order
开发BizTalk项目的时候会先约定各系统之间往来的消息格式. 由于BizTalk内部唯一使用XML文档.因此消息的格式为XML Schema(XML Schema 用于描述 XML 文档的结构).虽 ...
- mysql系列十二、mysql常用hint
对于经常使用oracle的朋友可能知道,oracle的hint功能种类很多,对于优化sql语句提供了很多方法.同样,在mysql里,也有类似的hint功能.下面介绍一些常用的. 强制索引 FORCE ...
- 聊聊MySQL的加锁规则《死磕MySQL系列 十五》
大家好,我是咔咔 不期速成,日拱一卒 本期来聊聊MySQL的加锁规则,知道这些规则后可以判断SQL语句的加锁范围,同时也可以写出更好的SQL语句,防止幻读问题的产生,在能力范围内最大程度的提升MySQ ...
- 闯祸了,生成环境执行了DDL操作《死磕MySQL系列 十四》
由于业务随着时间不停的改变,起初的表结构设计已经满足不了如今的需求,这时你是不是想那就加字段呗!加字段也是个艺术活,接下来由本文的主人咔咔给你吹. 试想一下这个场景 事务A在执行一个非常大的查询 事务 ...
- 为什么不让用join?《死磕MySQL系列 十六》
大家好,我是咔咔 不期速成,日拱一卒 在平时开发工作中join的使用频率是非常高的,很多SQL优化博文也让把子查询改为join从而提升性能,但部分公司的DBA又不让用,那么使用join到底有什么问题呢 ...
- Alamofire源码解读系列(十二)之请求(Request)
本篇是Alamofire中的请求抽象层的讲解 前言 在Alamofire中,围绕着Request,设计了很多额外的特性,这也恰恰表明,Request是所有请求的基础部分和发起点.这无疑给我们一个Req ...
- 为什么不建议给MySQL设置Null值?《死磕MySQL系列 十八》
大家好,我是咔咔 不期速成,日拱一卒 之前ElasticSearch系列文章中提到了如何处理空值,若为Null则会直接报错,因为在ElasticSearch中当字段值为null时.空数组.null值数 ...
- Web 前端开发精华文章推荐(jQuery、HTML5、CSS3)【系列十二】
2012年12月12日,[<Web 前端开发人员和设计师必读文章>系列十二]和大家见面了.梦想天空博客关注 前端开发 技术,分享各种增强网站用户体验的 jQuery 插件,展示前沿的 HT ...
随机推荐
- Centos 6 & Centos 7安装rabbitmq3.6.15(单节点)
系统准备 安装 erlang 语言环境 安装rabbitmq 配置网页插件 配置访问账号密码和权限 系统准备 centos6.5 与 centos7 都可以 ###安装依赖文件 yum -y inst ...
- Unity NGUI 多个UIPanel对粒子的剪裁
之前写过一篇单个 UIPanel 对粒子的裁剪,地址是:https://www.cnblogs.com/jietian331/p/5075487.html 但项目中有时会遇到多个UIPanel,如下面 ...
- 剑指offer——05重建二叉树
题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7, ...
- code rain???
Everybody loves the visual effect of the falling binary code known as ” Rain ” in The Matrix. In thi ...
- luogu3384 /// 树链剖分+线段树模板
题目大意: https://www.luogu.org/problemnew/show/P3384 树链剖分的讲解 两个dfs() 修改 查询 很详细很好理解 https://www.cnblogs. ...
- Activiti学习笔记9 — UserTask共有任务的使用
1.创建流程引擎对象 private ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); 2.发布一个流程 ...
- JS事件 鼠标单击事件( onclick )通常与按钮一起使用。onclick是鼠标单击事件,当在网页上单击鼠标时,就会发生该事件。同时onclick事件调用的程序块就会被执行
鼠标单击事件( onclick ) onclick是鼠标单击事件,当在网页上单击鼠标时,就会发生该事件.同时onclick事件调用的程序块就会被执行,通常与按钮一起使用. 比如,我们单击按钮时,触发 ...
- JS按比例缩放图片
1.JS代码 <script type="text/javascript" language="javascript"> var flag = fa ...
- 详解redis服务
http://mp.weixin.qq.com/s?__biz=MzIyMDA1MzgyNw==&mid=2651968327&idx=1&sn=6e6cb01d334d7ae ...
- 【JZOJ3422】水叮当的舞步
description 水叮当得到了一块五颜六色的格子形地毯作为生日礼物,更加特别的是,地毯上格子的颜色还能随着踩踏而改变. 为了讨好她的偶像虹猫,水叮当决定在地毯上跳一支轻盈的舞来卖萌~~~ 地毯上 ...