知识卡片
数据库与文件系统是应对磁盘慢速限制的产物,假设磁盘不存在会怎样
内容
Oracle、MySQL、SQL Server这类数据库产品之所以流行,根本原因是硬盘——过去五十年高速旋转盘片、磁感应读取的硬盘一直是数据存储的主流,但磁盘访问速度始终是瓶颈:数据按环形轨道存储、划分成4KB扇区,读一个特定字节要挪磁头到轨道、等盘片转到位、把整个扇区读进内存再查询——这一整套流程通常是毫秒级,比处理器速度慢一百万倍(数据若不在硬盘上、直接在内存里,访问速度是纳秒级)。为应对这个限制,业界发展出索引、缓存、查询优化器,以及配套的标准数据展现格式,进而分化出两套截然不同的系统:文件系统(基于文档格式,擅长按名字存取整份文档,但检索内容困难——找一个叫login.c的文件很容易,但找出所有包含变量x的.c文件就很慢)和关系型数据库系统(关注内容本身,擅长按共同属性检索一系列记录,但对存取内容不透明的文档支持较弱)——两者本质都是为优化磁盘存储而设计的数据组织方式,都会把数据缓存进内存以便快速操作。这就引出了一个假设性但极具启发性的问题:如果磁盘根本不存在(硬盘正在走向历史,就像磁带软盘CD一样,RAM正在取代一切),数据该怎么组织?答案显而易见:链表、树、哈希表、堆栈、队列这些数据结构,靠指针或引用访问——这才是对程序员最自然的方式。仔细想想会发现我们其实早就在这样做了:即使数据存在数据库或文件系统里,最终也总要读进内存、按最方便的形式重组成这些数据结构,很少会真的按文件和表格的原生形式来操作数据。这正是数据库只是实现细节的根源:数据库不过是在硬盘和内存之间搬运数据的一种手段,本质是一个装满字节的长期存储大桶,系统架构真正不该关心数据在旋转磁盘表面上是什么格式,理想情况下甚至该对磁盘本身的存在完全无感。
参考来源
- 位置:《架构整洁之道》第30章《数据库只是实现细节》"为什么数据库系统如此流行""假设磁盘不存在会怎样""实现细节"(源文件:_epub-src/text/part0015_split_000.html)
- 结论依据:原文详述硬盘毫秒级访问速度的物理限制催生索引/缓存/查询优化器及文件系统/关系型数据库两套系统,并用"假设磁盘不存在"的思想实验说明程序员天然会用链表树哈希表等数据结构组织数据,指出数据库本质是硬盘内存间搬运数据的手段,直接支撑本卡片结论。
- 原始内容:毫秒级的速度看起来好像并不是很慢,但这已经比大多数处理器的速度慢一百万倍了……当然不,我们会将数据存储为链表、树、哈希表、堆栈、队列等各种各样的数据结构……数据库终究只是在硬盘与内存之间相互传输数据的一种手段而已。