Java后端面试学习知识总结——数据库:MySQL

关系型数据库的主要考点

  1. 架构
  2. 索引

架构

1.怎么设计一个关系型数据库?

1.1什么是关系型数据库?

  关系型数据库,是指采用了关系模型来组织数据的数据库,其以行和列的形式存储数据,以便于用户理解,关系型数据库这一系列的行和列被称为表,一组表组成了数据库。用户通过查询来检索数据库中的数据,而查询是一个用于限定数据库中某些区域的执行代码。关系模型可以简单理解为二维表格模型,而一个关系型数据库就是由二维表及其之间的关系组成的一个数据组织。

1.2关系型数据数据库的组成。

  一个关系型数据库是由两部分组成,一部分是RDBMS,另一部分是存储系统
  RDBMS的全拼是Relational Database Management System,从字面上可以理解为关系数据库管理系统。可以简单理解为为是关系型数据库中的管理系统,也可以认为是一个程序实例,用来跟用户进行交互和数据的操作,将物理存储映射成逻辑结构。
  存储系统即文件系统,即将数据以文件的形式持久化存储进硬盘(SSD,机械硬盘)中。

1.3如何设计一个关系型数据库?

  设计一个关系型数据库,其实主要是设计RDBMS。可以将RDBMS拆分成以下几个子模块。
  1.存储管理模块:对数据的格式和文件分割进行管理,把物理数据通过逻辑结构标示出来。在这一模块中,还需要对存储效能进行优化,因为磁盘的IO速度很低,不能在磁盘上做数据的处理,需要将数据读取到内存当中进行处理,为了提高效率就需要尽量减少磁盘的IO次数。在进行磁盘IO的时候,读取一行数据和多行数据所消耗的时间是差不多的,所以行就失去了意义。在关系型数据库中,一般将页和块作为逻辑存储单位,块和页中存放多行数据,每次IO加载多个块到内存当中来提高效率。
  2.缓存模块:为了更好更快地对数据文件进行操作,需要引入缓存机制,将取出的数据块放入缓存中,下次程序再次使用就可以直接从内存中返回而不是对磁盘进行IO。缓存管理有许多种算法, 有一种思想是一旦某行数据被访问了,那么它附近的数据也极有可能在最近的访问中被访问到。
  3.SQL解析模块:在外界对数据库进行操作时,是需要使用SQL语句的,SQL解析模块负责将SQL语句解析编译成机器能识别的语言,并对数据进行操作。如果想要提升SQL效率,可以将SQL语句编译之后存到缓存当中,方便下次使用的时候直接解析即可。
  4.日志管理模块:对数据库的操作需要记录下来,方便做数据库的主从同步和数据恢复。
  5.权限划分模块:需要给用户数据管理的私密空间,按照权限划分,给不同用户不同的操作级别。
  6.容灾机制模块:数据库挂了需要恢复,怎么恢复,恢复到什么程度,需要设计。
  7.索引模块:为了提升查询数据的速度,需要引入索引模块。
  8.锁管理模块:为了让数据库支持并发,需要引入锁管理模块。
数据库架构

1.4索引模块

  1.4.1 为什么要使用索引?
  如果说没有索引的话,我们从数据库中查询数据需要对数据库进行全表扫描来查询所需的数据,将整张表的数据全部或者分批次加载到内存当中,找到我们需要的数据并返回。这种方式非常的慢,数据量小还可以,数据量大之后就不能用了,所以我们需要避免全表扫描的情况,引入索引机制。
  索引的灵感来自于字典,在字典的检索目录中,我们将文字的关键信息组织起来,比如偏旁和部首,查询的时候根据偏旁或者部首找到对应的页码,就快速找到了我们想要的数据。数据库也一样,将关键信息放在索引中,快速找到数据所在的内存地址来获取数据。
  1.4.2 什么样的信息适合作为索引?
  能把该记录限定到一定范围内的字段,就适合用来作为索引,比如主键、唯一建和其他普通键都可以。索引的设置也需要进行相应的考虑,不是所有的字段作为索引都很高效。
  1.4.3 索引的数据结构选择
  有了关键字还不足以成为一个索引系统,关键是利用什么样的逻辑结构将关键字组织起来,让我们的检索变得高效。这就需要选择一种合适的数据结构了。具体的数据结构论述将在章节2中进行阐述。

索引

1.运用二分搜索树来创建索引。

  二分搜索树是一种常用的树状数据结构,又称为BST。在树形态比较平衡的情况下,BST的搜索效率可以达到O(logN)级别,搜索的时间和树的层数成正比。所以我们可以利用BST来为数据库建立索引模块。
  具体的实现就是,可以将索引的关键字信息挂到BST上,根据大小关系在BST中进行搜索,BST的每个节点存储着关键字对应数据的物理内存地址,搜索到所需关键字之后,根据指针去内存中拿到整个数据。也可以将数据和索引一起挂在BST的节点上,直接返回即可。
  BST虽然简单,查询效率也高,但是有一个致命的问题是BST有可能会退化成一条链表,所有的节点都挂在根结点的右子树或者全部挂在左子树上,此时查询效率就会退化成O(N)级别,和全表扫描一样了。所以我们需要更稳定的索引结构,此时AVL树和红黑树就跳进了我们的脑海。

2.运用AVL树和红黑树来创建索引。

  AVL树是一种平衡二叉搜索树,通过旋转的操作来保持BST的左右子树高度差不超过1,不会出现极端的链表化的情况。红黑树也是对BST的另外一种变种数据结构,在节点上增加了颜色限制,同时也是靠旋转来调整结构。
  虽然这两种数据结构都避免了BST的链表化&#

  • 1
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值