我正在使用riak版本1.4.10,它与两个主机相关。我无法使用对键的简单删除操作来摆脱以前操作遗留的键。当我列出存储桶的密钥时,它会显示旧密钥,但是如果我尝试检索与密钥关联的数据,则不会找到任何数据。当我尝试删除密钥时,它仍然存在。可能是什么原因造成的?有没有办法擦拭桶中的钥匙,以便从干净的石板开始?我不关心riak中的任何数据,但我宁愿不必再重新安装所有数据。
答案 0 :(得分:4)
您可能正在查看旧数据的墓碑。由于Riak是一个最终一致的数据存储,它需要跟踪删除,就像它们是普通的写入一样,至少在一段时间内。
如果一个节点上存在数据,而另一个节点上没有数据,那么如何确定它是否还没有“传播”,或者是DELETE?
Riak使用墓碑解决了这个问题。每当您删除某些内容时,Riak不会立即擦除数据,而是使用它知道意味着删除的特殊值替换现有值。此特殊值包含从前一个值开始的vclock,以及指示已删除的元数据。因此,当确定上述问题时,Riak只是将值的vclock与墓碑的值进行比较。无论哪一个下降都必须是正确的。
为了解决主要包含墓碑的数据量不断增长的问题,一段时间后收获了墓碑。使用delete_mode设置设置时间。处理完DELETE并将逻辑删除写入主vnode后,删除进程会发出密钥的GET请求。每当GET进程遇到墓碑,并且所有主要vnode都使用相同的墓碑响应时,它会根据delete_mode设置调度要收集的逻辑删除。
因此,如果你想真正摆脱墓碑,请检查你的delete_mode设置以确保它没有设置为'keep',并为每个设置发出一个get以确保它真的消失。
或者,如果您只是擦除数据存储以重新启动测试,请停止Riak,删除正在使用的后端的data_root下的所有文件,然后重新启动。