个人觉得数据库和操作系统是软件里面带头大哥,操作系统出现使昂贵计算机走向大众视野,操作系统屏蔽一切底层东西,使普通用户和软件从业者无需了解硬件是如何工作的,同时提供可视化界面让用户操作起来更方便。数据库诞生解决了数据共享问题,能够管理数据。
任何一门语言要么需要编译,要么需要解释,同样数据库在收到到SQL语句也需要解析,包含:词法、文法等等分析。假设用户发起Select语句,数据库在接收到语句后分析,计算出用户需要数据在哪个文件里面,在文件里面哪个位置。进一步假设数据不在内存中,
CPU向磁盘发起读请求,并把数据库进程调度到阻塞队列中。这时候OS捕获到磁盘请求,OS向磁盘控制器发起请求需要某某位置数据,然后磁盘控制器向驱动臂发出信号,驱动臂带头着磁头寻道,等待所需要数据磁道旋转到磁头下面,碰巧磁头移动位置下面正好是所需要数据,也有可能所需要数据已经旋转过去,需要在旋转一圈,这就是所谓的寻道时间。找到数据后就可以传输到内存里,从内存里把数据返回给用户,从读磁盘,传输数据到内存这个过程中。CPU可以等待,也可以用做别的事情,为了充分使用CPU资源,设计者们选择CPU不要等待IO,去别的事情,等IO完成之后发起中断,CPU在去调度唤醒进程拿数据返给用户。任何软件都喜欢从内存中取数据,同样数据库取数据并不是以记录为单位,而是以块为单位,这样体现时间局部性和空间局部性。