深入浅出计算机组成原理:设计⼤型DMP系统(下)-SSD拯救了所有的DBA(第53讲)
一、上节总结回顾 上一讲里,根据DMP系统的各个应用场景,我们从抽象的原理层面,选择了AeroSpike作为KV数据库,Kafka作为数据管道,Hadoop/Hive来作为数据仓库。 不过呢,肯定有不信邪的工程师会问,为什么MongoDB,甚至是MySQL这样的文档数据库或者传统的关系型数据库不适应呢?为什么不能通过优化SQL、添加缓存这样的调优手段,解决这个问题呢? 今天DMP的下半场,我们就从数据库实现的原理,一起来看一看,这背后的原因。如果你能弄明表今天的这些更深入、更细节的原理,对于什么场景使用什么数据库,就会更加胸有成竹,而不是只有 跑了大量的性能测试才知道。下次做数据库选型的时候,你就可以“以理服人”了。 二、关系型数据库:不得不做的随机读写 我们先来想一想,如果现在让你自己写一个最简单的关系型数据库,你的数据要怎么存放在硬盘上?最简单最直观的想法是, 1、你的数据要怎么存放在硬盘上? 1、用一个CSV文件格式。一个文件就是一个数据表。 2、文件里面的每一行就是这个表里面的一条记录。 3、如果要修改数据库里面的某一条记录,那么我们要先找到这记录, 4、然后直接去修改这一行的数据。读取数据也是一样的。 要找到这样数据,最笨的办法当然是一行一行读,也就是遍历整个CSV文件。 不过这样的话,相当于随便读取任何一条数据都要扫描全表 , 2、太浪费硬盘的吞吐量了。那怎么办呢?