【发布时间】:2014-10-03 21:11:26
【问题描述】:
我正在使用 riak 版本 1.4.10,它与两个主机处于一个环中。我无法使用对键的简单删除操作来摆脱以前操作留下的键。当我列出存储桶的键时,它会显示旧键,但是如果我尝试检索与键关联的数据,则找不到数据。当我尝试删除密钥时,它仍然存在。这可能是什么原因?有没有办法擦掉桶里的钥匙,让它从一张白纸开始?我不关心 riak 中的任何数据,但我宁愿不必重新安装所有内容。
【问题讨论】:
标签: riak
我正在使用 riak 版本 1.4.10,它与两个主机处于一个环中。我无法使用对键的简单删除操作来摆脱以前操作留下的键。当我列出存储桶的键时,它会显示旧键,但是如果我尝试检索与键关联的数据,则找不到数据。当我尝试删除密钥时,它仍然存在。这可能是什么原因?有没有办法擦掉桶里的钥匙,让它从一张白纸开始?我不关心 riak 中的任何数据,但我宁愿不必重新安装所有内容。
【问题讨论】:
标签: riak
您可能会看到旧数据的墓碑。由于 Riak 是一个最终一致的数据存储,它需要像普通写入一样跟踪删除,至少在一段时间内。
如果数据存在于一个节点上,但不存在于另一个节点上,您如何判断它是尚未传播的 PUT 还是 DELETE?
Riak 通过使用墓碑解决了这个问题。每当您删除某些内容时,Riak 不会立即擦除数据,而是将现有值替换为它知道意味着已删除的特殊值。此特殊值包含从前一个值下降的 vclock,以及指示已删除的元数据。所以在决定上述问题的时候,Riak 只是将值的 vclock 与墓碑的 vclock 进行比较。哪个从另一个下降必须是正确的。
为了解决数据量不断增长且主要包含墓碑的问题,墓碑会在一段时间后收获。使用 delete_mode 设置设置时间。在处理完 DELETE 并将 tombstone 写入主 vnode 之后,删除进程会发出对密钥的 GET 请求。每当 GET 进程遇到一个 tombstone,并且所有的主 vnode 都以相同的 tombstone 响应时,它会根据 delete_mode 设置来安排 tombstone 的回收。
因此,如果您想真正摆脱墓碑,请检查您的 delete_mode 设置以确保它没有设置为“保留”,并为每个墓碑发出一个 get 以确保它真的消失了。
或者,如果您只是擦除数据存储以重新启动测试,请停止 Riak,删除您正在使用的后端的 data_root 下的所有文件,然后重新启动。
【讨论】: