Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Nosql 在Bitcask中,合并和压缩旧文件后,内存中的索引/哈希表如何更新?_Nosql_Storage_Riak - Fatal编程技术网

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

Nosql 在Bitcask中,合并和压缩旧文件后,内存中的索引/哈希表如何更新?,nosql,storage,riak,Nosql,Storage,Riak,在Bitcask中,发生写入时: 数据被附加到文件中 内存中的哈希表使用指向数据的指针进行更新 当读取密钥时: 从哈希表中找到文件和偏移量 随机搜索IO用于获取数据 这些文件被分割,然后合并和压缩,以删除过时的数据。合并后,哈希表如何更新以指向新的合并文件?什么时候发生?此时读请求会发生什么情况?压缩由维护哈希表的同一进程处理。当需要压缩文件时,它会扫描哈希表中存储在要压缩文件中的键/值对,然后以与用户更新值相同的方式读取并重写该值 这将导致将新值写入新文件,并在写入每个键时更新哈希表 这意味着

在Bitcask中,发生写入时:

  • 数据被附加到文件中
  • 内存中的哈希表使用指向数据的指针进行更新 当读取密钥时:

  • 从哈希表中找到文件和偏移量
  • 随机搜索IO用于获取数据
    这些文件被分割,然后合并和压缩,以删除过时的数据。合并后,哈希表如何更新以指向新的合并文件?什么时候发生?此时读请求会发生什么情况?

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

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

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