【发布时间】:2011-09-19 00:21:55
【问题描述】:
我想将几个条目存储到一个文件中(针对读取进行了优化),一个好的数据结构似乎是 B+ 树。它提供 O(log(n)/log(b)) 访问时间,其中 b 是一个块中的条目数。
有很多论文等描述了 B+ 树,但总体上我在理解基于块的存储系统方面仍然存在一些问题。也许有人可以为我指出正确的方向或回答几个问题:
- (所有常见的)文件系统是否会在新块的开头创建新文件?那么,我可以确定 seek(0) 会将读/写头设置为设备块大小的倍数吗?
- 我应该只使用像
pread(fd, buf, n * BLOCK_SIZE, p * BLOCK_SIZE)这样的调用(n,p 是整数)来确保我总是读取完整的块,这对吗? - 是 read() BLOCK_SIZE 字节到数组还是 mmap() 更好?或者,如果我映射许多块并且只访问几个块,那么只有区别吗?什么更好?
- 我是否应该通过在每个块的末尾添加填充字节来避免键生成多个块?我是否也应该通过在数据之间添加填充字节来对叶节点执行相同的操作?
非常感谢,
克里斯托夫
【问题讨论】:
标签: linux filesystems io b-tree