赞
踩
B-tree在外部存储中的应用
大家知道我们在使用数据结构时,常常将其直接放置到内存中。但是大数据量只能放到磁盘中。这里要说的就是,在磁盘存储中,文件系统是如何利用B-tree结构来提高磁盘读取效率的。
首先来说一下内存和磁盘性能上的巨大差别。
大家知道数据在磁盘上存储在特定的扇区。因此要读写特定的数据,需要三步:
1,首先磁头必须移动到正确的磁道上。
2,然后需要等待磁片旋转,使磁头对准数据所在的位置。因此磁盘的转速很重要,我们更喜欢7200转/分钟的磁盘而不是5400转/分钟。
3,磁头读取或写入数据。
上述过程大概需要毫秒级的时间。而内存读取仅需要微秒级的时间。大体上说,二者的的速度差了大约1万倍。
磁盘上的数据都是按块存储的。磁盘驱动器一次最少读或写一个数据块。通常数据块为8k。磁头和磁片就位后,读写一块是非常快的。
因此从这点来说,块越大,读写的效率越高(因为一次可以读写更大的数据量)。但是数据块过大会导致很多时候读出的数据大部分没有用,只能被扔掉。所以这是一个平衡。
但是磁盘查找的一个好处是,块数比记录数要少的多。假设文件是按顺序存储的,查找可以用二分法,因此查找效率是可以接受的。但是插入和删除就很糟糕了,因为我们假设数据块是有序的,这样插入和删除都需要移动其他的数据块来保持数据块有序。
鉴于这些种种的问题,文件系统使用B-tree来管理数据块。B-tree是一种多叉树,即每个节点包含多个数据项,同时有多个子节点。结构和2-3-4树类似。需要注意的是B-tree的B既不是Binary也不是Balance,B-tree的发明人表明过,B没有含义。可认为B-tree是一种Balanced S
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。