Riak 正在 bitcask 桶类型中创建过期密钥的兄弟姐妹
Riak is creating siblings of expired keys in bitcask bucket types
我有一个使用 multi
后端存储的 Riak 服务器,配置如下:
...
storage_backend = multi
multi_backend.bitcask_mult.storage_backend = bitcask
multi_backend.bitcask_mult.bitcask.expiry = 10s
...
我已检查以下步骤顺序是否正确。
- 使用键
key-1
输入一个新值。
- 获取键
key-1
的值 returns 预期值。
- 等待 15 秒。
- 尝试用
key-1
获取值。这 returns 没什么,因为密钥已过期。
到目前为止一切顺利。
但是,如果现在我再次使用相同的键值...
- 使用键输入一个新值
key-1
- 和
key-1
returns两个兄弟姐妹一起取值!
我在第 4 步和第 5 步之间等了几个小时(以防过期必须被刷新或类似的事情),但没有成功。
我可以解决处理兄弟姐妹的这种情况,无论如何我都会为我使用的其他一些存储桶做这件事,但我没想到必须处理 "expired siblings"!
我读过一些关于 automatic expiration and Riak Search 的内容,但我认为情况并非如此。
我是不是做错了什么?我错过了什么吗?
谢谢。
无效,过期有效,但您 运行 遇到了问题,我会打电话给 "Expiration <> Delete"。当一个对象在 Bitcask 中过期时,Bitcask 和后端 returns not_found
会创建一个墓碑,以响应对该对象的任何请求 但 该对象不会被删除。当 Bitcask 数据文件中最旧的对象过期并且整个文件都过期时,对象会得到 "deleted"。此时会创建一个新文件。
在 Bitcask 中创建新文件之前,对象实际上仍然存在,即使 Bitcask 正在返回 not_found
。当您写入 "deleted" 键时,Bitcask 的最后修改时间正在更新,本质上是复活它。
要检验这个理论,您实际上可以停止 Riak 并重新启动它。重新启动 Riak 将导致 Bitcask 创建一个新的数据文件,并阻止你获得兄弟姐妹。
长话短说,在这种情况下,您仍然需要处理兄弟姐妹。
我有一个使用 multi
后端存储的 Riak 服务器,配置如下:
...
storage_backend = multi
multi_backend.bitcask_mult.storage_backend = bitcask
multi_backend.bitcask_mult.bitcask.expiry = 10s
...
我已检查以下步骤顺序是否正确。
- 使用键
key-1
输入一个新值。 - 获取键
key-1
的值 returns 预期值。 - 等待 15 秒。
- 尝试用
key-1
获取值。这 returns 没什么,因为密钥已过期。
到目前为止一切顺利。
但是,如果现在我再次使用相同的键值...
- 使用键输入一个新值
key-1
- 和
key-1
returns两个兄弟姐妹一起取值!
我在第 4 步和第 5 步之间等了几个小时(以防过期必须被刷新或类似的事情),但没有成功。
我可以解决处理兄弟姐妹的这种情况,无论如何我都会为我使用的其他一些存储桶做这件事,但我没想到必须处理 "expired siblings"!
我读过一些关于 automatic expiration and Riak Search 的内容,但我认为情况并非如此。
我是不是做错了什么?我错过了什么吗?
谢谢。
无效,过期有效,但您 运行 遇到了问题,我会打电话给 "Expiration <> Delete"。当一个对象在 Bitcask 中过期时,Bitcask 和后端 returns not_found
会创建一个墓碑,以响应对该对象的任何请求 但 该对象不会被删除。当 Bitcask 数据文件中最旧的对象过期并且整个文件都过期时,对象会得到 "deleted"。此时会创建一个新文件。
在 Bitcask 中创建新文件之前,对象实际上仍然存在,即使 Bitcask 正在返回 not_found
。当您写入 "deleted" 键时,Bitcask 的最后修改时间正在更新,本质上是复活它。
要检验这个理论,您实际上可以停止 Riak 并重新启动它。重新启动 Riak 将导致 Bitcask 创建一个新的数据文件,并阻止你获得兄弟姐妹。
长话短说,在这种情况下,您仍然需要处理兄弟姐妹。