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 ...
随机推荐
- npm ERR! missing script: dev 解决方案
运行命令npm run dev 出现 npm ERR! missing script: dev 的错误 这是因为vue 版本问题,使用 npm run serve 来运行项目
- eclispe 创建maven 项目:Could not resolve archetype org.apache.maven.archetypes
昨天新装eclispe 后,创建maven工程后出现 Could not resolve archetype org.apache.maven.archetypes:maven-archetype-q ...
- !!!myeclipse 上加载本地图片问题,无法加载问题
出现无法加载本地图片的问题, 原因就是把图片放到了本地项目中的image了,但是myeclipse上没有刷新 这样以后 本地的图片比在线的要快 低级错误,诶!
- this.$router.go()和this.$router.push()的差别
1.this.$router.go(val) => 在history记录中前进或者后退val步,当val为0时刷新当前页面. 2.this.$router.push(path) => 在h ...
- 精选15个国外CSS框架
转自:http://blog.bingo929.com/css-frameworks-15.html 什么是css框架 实际上还是让我们从框架说起吧.框架就是一个你可以用于你的网站项目的基本的概念上的 ...
- iOS进阶五-RunLoop
简介 RunLoop 运行循环.跑圈 RunLoop的作用主要体现在三方面: 1.保持程序持续运行 2.处理App中的各种事件(比如触摸事件.定时器事件.Selector事件) 3.节省CPU资源,提 ...
- js隐式类型转换,预编译、递归、作用域,作用域链、闭包、立即执行函数、继承圣杯模式
隐式类型转换 调用Number()当有运算符(加减乘除,求余)时,会调用Number()转为数字再运算,除了 加 当 有字符串时就变身成拼接Boolean();String(); typeof()st ...
- JavaScript - 常用对象相关
1. String对象 length : 字符串的长度 charAt(index) : 返回指定位置的字符串, 下标从0开始 indexOf(str) : 返回指定的字符串在当前字符串中首次出现的位置 ...
- luoguP2580 于是他错误的点名开始了 [Trie]
题目背景 XS中学化学竞赛组教练是一个酷爱炉石的人. 他会一边搓炉石一边点名以至于有一天他连续点到了某个同学两次,然后正好被路过的校长发现了然后就是一顿欧拉欧拉欧拉(详情请见已结束比赛CON900). ...
- 概率+后效性处理——cf930B好题
之前题目看错了.. 先用双倍字符串处理后效性 首先要确定一个结论:如果原串s中相距为d的ch1和ch2只有一对,那么如果第一个翻开ch1,第二个翻开ch2,就能确定k 现在要求的是当我们第一次翻开的是 ...