file organization指的是如何安排file上的record,当file存储在磁盘上时,我们可以以一定顺序去排以便于检索,但这样做的代价十分昂贵,同时由于操作的多样性,一种排法无法满足所有需求。
我们引入了indexing的技术来辅助我们进行管理。
磁盘和内存通过页为单元交换信息。磁盘io成为主要负担,优化io是重要任务。我们注意以下几点:
file and access layer通过buffer manager访问磁盘
磁盘的空间通过disk access manager来访问.
最简单的文件组织是unordered file或者heap file。 index用来组织磁盘上的data records来优化特定类型的retrieval operations。
我们可以利用index的search key来满足检索,我们还可以定义额外的index来满足不同的检索需要。
data entry 是 index file中存储的record,k*代表以k为搜索键值的data entry,我们可以有效的通过键值检索data entry
] 有三种选择用来表示index中的data entry:
如果data record 的顺序和data entry的顺序相近或一样时,则称为index 是clustered, 1天然是clustered indexes, 2,3只有在data record基于search key排序时才是clustered
clustered index有着类似于连续存储的特点,这使得它读写代价较小
文件中的records以bucket的形式聚集在一起,一个bucket由一个primary page,有可能由additional page连接起来,哪个record属于哪个bucket由hash function和search key决定。
其具体结构如图所示:
左侧是基于age的hash,其index 结构是第1类型的,右侧是第二类型的,先基于sal的hash找到相关rid,在找到相关record
data entry 以根据search key 排序的方式被组织,然后一个层次型的搜索结构被维护用来指向对应entry的页.
其具体结构如图;
每一个结点都是一个页,检索一个页涉及到disk I/O.中间结点的页包含指向下一个层结点的指针,叶子节点包含data entry,在图中为data record
每一次检索的disk io数等于从root 到leaf的path长,通过b+树我们可以让路径一样长,
要考虑的文件类型:
B表示page的数目,R表示每一页的record数目,D表示disk io的时间,C表示处理record的时间, H表示应用hash的时间,F表示树的平均子节点,fan-out