一个进程的执行,需要访问磁盘,加载数据到内存,等待CPU预算。因为进程数据量远大于内存的大小,所以引入了虚拟内存的概念。虚拟内存将程序需要的数据进行划分,用到的数据放到内存中,暂时不用的放到磁盘里。每次数据在内存和磁盘中的交换都是非常耗时的。因为磁盘读取依靠的是机械运动,分为寻道时间、旋转延迟、传输时间三个部分,这三个部分耗时相加就是一次磁盘IO的时间,大概9ms左右。这个成本是访问内存的十万倍左右;正是由于磁盘IO是非常昂贵的操作,所以计算机操作系统对此做了优化:预读;每一次IO时,不仅仅把当前磁盘地址的数据加载到内存,同时也把相邻数据也加载到内存缓冲区中。因为局部预读原理说明:当访问一个地址数据的时候,与其相邻的数据很快也会被访问到。每次磁盘IO读取的数据我们称之为一页(page)。一页的大小与操作系统有关,一般为4k或者8k。这也就意味着读取一页内数据的时候,实际上发生了一次磁盘IO。
-
B-树与数据库索引(MongoDB)
https://www.cnblogs.com/dongguacai/p/7239599.html
-
B+树与数据库索引(常用数据库)