Linux 基于块的存储
我想将几个条目存储到一个文件中(针对读取进行了优化),一个好的数据结构似乎是一个B+树。它提供了一个O(log(n)/log(b))访问时间,其中b是一个块中的条目数 有很多文章等都在描述B+树,但我在理解基于块的存储系统时仍然有一些困难。也许有人能给我指出正确的方向或回答几个问题:Linux 基于块的存储,linux,filesystems,io,b-tree,Linux,Filesystems,Io,B Tree,我想将几个条目存储到一个文件中(针对读取进行了优化),一个好的数据结构似乎是一个B+树。它提供了一个O(log(n)/log(b))访问时间,其中b是一个块中的条目数 有很多文章等都在描述B+树,但我在理解基于块的存储系统时仍然有一些困难。也许有人能给我指出正确的方向或回答几个问题: (所有通用)文件系统是否在新块的开头创建新文件?那么,我可以确定seek(0)会将读/写头设置为设备块大小的倍数吗 我只应该使用像pread(fd,buf,n*BLOCK\u SIZE,p*BLOCK\u SIZE
pread(fd,buf,n*BLOCK\u SIZE,p*BLOCK\u SIZE)
(n,p是整数)这样的调用来确保我总是读取完整的块,这对吗克里斯托夫
我想到的这个规则的一个例外是ReiserFS,它将小文件直接放入文件系统结构中(如果我没记错的话,它就是一个B+树!)。对于非常小的文件,这实际上是一个可行的优化,因为数据已经在RAM中,无需另一次搜索,但它同样可能是一个反优化,具体取决于情况
read
是通过从页面缓存复制数据来实现的,而mmap
只是将页面重新映射到您的地址空间(根据您的保护标志,可能会在写入时将其标记为copy)。因此,mmap
将始终至少同样快,而且通常更快