10 分钟梳理关系数据库基础知识(二):存储结构

每天10分钟,用去食堂吃饭的时间解决一个知识点。

存储介质

数据库系统涉及的存储介质中,有代表性的有以下几种:

  • 高速缓存(cache) cache最快,也最贵。我们在使用的过程中一般接触不到,但数据库的实现者在设计数据结构和算法时还是会考虑cache的影响的。嗯,写到这里,不由地端起茶杯,抿了一口水。
  • 主存(main memory)
  • 闪存(flash memory) 现在主要是用在SSD上。提升随机读写的性能。
  • 磁盘(disk) 我们一般进行的讨论中,都是默认数据放在磁盘上。而磁盘与主存之间,是以块(block)为单位交换数据的。优化查询,就是要优化块数,即磁盘IO的次数。而进一步细化的话,磁盘的访问时间由三部分组成:寻道时间,旋转时间,传输时间。

磁盘可以通过SATA,SCSI或SAS口连接到计算机,也可以通过网络与磁盘控制器相连,即我们常提到的SAN和NAS。

RAID

RAID的指导思想就是两条:通过冗余提高可靠性,通过并行提高性能。说到这再岔开一句,其实我们在计算机很多领域都会发现,可靠性都是靠冗余来保证的,而冗余又会带来一致性等问题,针对新的问题,不同的思路会得到各自的方案,我觉得抓住这条主线会有助于我们的学习。

回到正题,我直接画一张RAID不同级别的图吧:

也有厂商使用RAID 1+0或者RAID 10这样的说法,和这里不是同一个术语版本,大家不要混淆就可以了。

缓冲区

我们一直在说,数据库要尽量减少磁盘和主存间传输的block的数目。这也是学习数据库的一条主线。那么,很自然的一个想法就是,我保存尽量多的block在主存中,这样访问时再去磁盘上交换的几率不就降低了嘛。而主存中用于存储磁盘块的拷贝的地方,就叫做缓冲区(buffer)。但是主存比磁盘小得多,所以buffer中内容如何管理,是数据库中很重要也很有的内容。

比如buffer快满时如何替换,经典的算法我们很容易就会想到LRU,但InnoDB就在LRU的基础上又加了一个因子,避免全表扫描对替换buffer的影响。

原创声明,本文系作者授权云+社区-专栏发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏跟着阿笨一起玩NET

如何正确运用异步编程技术

4.1、既然异步可以大大提供应用程序的响应能力?那么ASP.NET MVC 如果全部用异步控制器(Async Controller),会有什么效果?会成为高吞吐...

522
来自专栏腾讯技术工程官方号的专栏

科普:QUIC 协议原理分析

本文将主要介绍 QUIC 协议产生的背景和核心特性。

2.5K10
来自专栏Java技术

【面试题】2018年最全Java面试通关秘籍汇总集!

前几天在交流群里有些小伙伴问面试相关的试题,当时给出了一些问题,苦于打字太累就没写下去了,但觉得这是一个很不负责任的表现,于是下来整理了一下近几年的私藏,特分享...

1132
来自专栏java技术学习之道

常见的缓存穿透,缓存击穿,缓存雪崩解决方案分析

1723
来自专栏GuZhenYin

应用程序的8个关键性能指标以及测量方法

前言 高性能一直是我们作为程序员..孜孜不倦的追求.. 有的时候甚至会为了一句代码吵上几天.. 那么到底应该如何评估我们的性能指标来判断是否需要优化呢? 今天就...

2007
来自专栏贾老师の博客

CPU Cache 学习

1333
来自专栏前沿技墅

再聊服务化基石:也有IO的事儿

1305
来自专栏大内老A

使命必达: 深入剖析WCF的可靠会话[共8篇]

作为一个通信基础平台,WCF必须保证通信的可靠性。由于消息交换是WCF采用的通信手段,通信可靠性的保障体现在确保消息的可靠传输。WCF本质上是一个消息处理框架,...

1755
来自专栏Linyb极客之路

Spring Boot的并发编程

836
来自专栏JAVA高级架构

大型网站系统与 Java 中间件实践

第一章 分布式系统介绍 分布式系统的定义:组件分布在网络计算机上,组件间仅仅通过消息传递来通信并协调行动。 分布式系统的意义: 升级单机处理能力的性价比越来越...

3377

扫码关注云+社区