(1)磁盘文件的存放:
    平时数据都是插入一个个的表中,而表是个概念,其实在物理层面,对应着表空间,表空间对应着磁盘文件,在磁盘文件存放着数据,那么这个表空间的磁盘文件里数据是如何组织的?
    在磁盘文件里存放的数据,从最基本的角度来看,就是被拆分成一个一个的数据区(extent)分组,每个extent组包含256个extent,每个extent包含64个数据页,然后每个数据页都包含一行 行数据,在数据行里有很多的附加信息。在每个数据页,每个数据区也都有很多的附加信息。

    (2)在插入一条数据时,是选择磁盘文件里的哪个数据页加载到缓存页里呢?
    其实会看你往那个表插入数据,根据插入哪个表找到表空间,找到表空间后就可以定位到对应的磁盘文件,有了磁盘文件,就可以从里面找到一个extent组,找到extent就可以定位到 哪个数据页,这个数据页可能是数据页,也可能放了一些数据行。然后就把这个数据页从磁盘里完整加载出来,放入Buffer Pool的缓存页里。

    (3)从磁盘里怎样读取一个数据页?
    磁盘文件里的数据都是紧挨在一起的,类似于:
    0xdfs3439399abc0sfsdkslf9sdfpsfds0xdfs3439399abc0sfsdkslf9sdfpsfds
    0xdfs3439399abc0sfsdkslf9sdfpsfds0xdfs3439399abc0sfsdkslf9sdfpsfds
    磁盘文件里存放的看起来就是这样的,可能先是一个extent组开始的一些东西,然后里面是一个个的extent,每个extent开始的时候会写特殊信息,然后再是一个个数据页,里面是一 行行,那么读取时应该怎么读?在读取数据页时通过随机读写从哪个文件的哪个位置开始,到哪个位置结束。
    dataFile.setStartPosition(25347)
    dataFile.setEndPosition(28890)
    dataPage = dataFile.read()
    读取到的可能就是 psfds0xdfs3439399 那个数据页的该位置之间的数据 ;通过位置坐标索引定位到具体的磁盘文件里的行数据。

    因为一个数据页的大小其实是固定的,所以一个数据页固定就可能在一个磁盘文件里占据了某个开始位置到结束位置的一段数据,写回去的时候也是一样,选择好固定的一段位置的数据, 直接把缓存页写回去,覆盖原来数据页。
    54077700_1582810133 (1).jpg