在Bitcask中,在合并和压缩旧文件后,内存中的索引/哈希表如何更新?



在Bitcask中,当写入发生时:

  1. 数据追加到文件
  2. 内存中的哈希表使用指向数据的指针进行更新。

当对密钥进行读取时:

  1. 文件和偏移量可从哈希表中找到
  2. 随机查找 IO 用于获取数据。

这些文件被分割,然后合并和压缩以删除过时的数据。合并后,如何更新哈希表以指向新的合并文件?什么时候发生?此时读取请求会发生什么情况?

压缩由维护哈希表的同一进程处理。 当需要压缩文件时,它会扫描哈希表中存储的键/值对,以与用户更新值相同的方式读取并重写值。

这会导致将新值写入新文件,并在写入每个键时更新哈希表。

这意味着哈希表永远不会过时,因此 get 请求无需关心压缩是否正在进行。

最新更新