存储&数据库|青训营笔记

121 阅读3分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的第5篇笔记

什么是数据库

数据库(Database)就是按照数据结构来组织,存储和管理数据的仓库

专业的数据库是专门对数据进行创建,访问,管理,搜索等操作的软件,比起我们自己用文件读写的方 式对象数据进行管理更加的方便,快速,安全

作用

  • 对数据进行持久化的保存
  • 方便数据的存储和查询,速度快,安全,方便
  • 可以处理并发访问
  • 更加安全的权限管理访问机制

常见的数据库

数据库分两大类,一类是 关系型数据库。另一类叫做 非关系型数据库。

  • 关系型数据库: MySQL(已被Oracle收购),Oracle,PostgreSQL,SQLserver...
  • 非关系型数据库:Redis内存数据库,MongoDB文档数据库...

数据库存储的内部结构

传统的关系型数据将数据以B树的形式存储在磁盘上,它们也会在RAM上使用B树维护这些数据的索引,来保证更快的访问速度。插入的行存储在B树的叶子节点上,所有的中间节点用来存储用于导航查询语句的原数据。因此,当有数以百万计的数据被插入到数据库中时,索引和数据存储会变得十分大。因此,为了快速的访问,需要从磁盘中加载所有数据到内存,但是RAM一般没有这么大的空间来存储所有的数据。因此,数据库必须从磁盘中读取部分数据。

磁盘I/O花费的时间很长,是影响数据库性能的主要原因之一。B树是支持随机读写,in-place 替换,十分紧凑并且自平衡的数据结构,但是受磁盘I/O速度的限制。随机读意味着当访问磁盘数据时,磁头必须移动到柱面上的指定位置,因此会消耗大量时间。

B树被设计为使用block的形式存储数据,因为操作系统读取读取一个block的数据要比读取单独字节数据要快的多。MySQL的InnoDB存储引擎的block大小为16KB。这意味着每次你读取或者写入数据时,大小为16KB的block数据会被从磁盘加载到RAM中,它会被写入新的数据,并且再次写回到磁盘上。假设数据库表的每一行数据为128字节(实际大小会变化),一个block(叶子节点)为16KB,存储了(16 * 1024) / 128 = 128行数据。B树的高度一般小于10,但是每一层的节点数量却很多,由此可以管理数以万计的数据。基于上述特性,B树适合作为数据内部存储结构。

 因此,在B树上进行读操作是相对来说比较快速的,因为该操作只需要遍历一些节点并且进行较少次数的磁盘I/O请求。而且,范围查询因为可以将数据以block的形式进行获取和操作而速度更快。