Riak正在创建bitcask桶类型中过期密钥的兄弟姐妹

时间:2016-11-30 12:10:19

标签: riak

我有一个使用multi后端存储的Riak服务器,配置如下:

...
storage_backend = multi
multi_backend.bitcask_mult.storage_backend = bitcask
multi_backend.bitcask_mult.bitcask.expiry = 10s
...

我已检查过以下一系列步骤是否正常。

  1. 使用键key-1添加新值。
  2. 使用键key-1获取值,返回预期值。
  3. 等15秒。
  4. 尝试使用key-1获取值。由于密钥已过期,因此不返回任何内容。
  5. 到目前为止一切顺利。

    但是,如果现在我再次使用相同的键放置值...

    1. 使用键key-1
    2. 添加新值
    3. 使用key-1获取值,返回两个兄弟姐妹!
    4. 我已经在第4步和第5步之间等了好几个小时(以防必须刷新过期或类似的事情),没有运气。

      我可以解决处理兄弟姐妹的这种情况,这对于我工作的其他一些桶来说无论如何都要做,但我并不期望必须处理过期的兄弟姐妹"!

      我已阅读过有关automatic expiration and Riak Search的内容,但我认为情况并非如此。

      我做错了吗?我错过了什么吗?

      感谢。

1 个答案:

答案 0 :(得分:2)

无效,到期工作正在运作,但您遇到了我将调用的问题"到期<>删除&#34 ;.当一个对象在Bitcask中到期时,一个墓碑由Bitcask创建,后端将not_found返回给该对象的任何请求该对象不被删除。该对象被删除"当Bitcask数据文件中最旧的对象到期并且整个文件过期时。此时,将创建一个新文件。

在Bitcask中创建新文件之前,即使Bitcask返回not_found,该对象仍然存在。当您写入"已删除"密钥Bitcask最后修改的时间正在更新基本上复活它。

要测试这个理论,您实际上可以停止Riak并重新启动它。重新启动Riak将导致Bitcask创建一个新的数据文件,并使您无法获得兄弟姐妹。

长话短说,你仍然需要在这种情况下与兄弟姐妹打交道。