2014-09-26 56 views
2

我使用的是riak 1.4.10版本,它与两个主机共享一个环。我无法摆脱先前操作中对键使用简单删除操作遗留的键。当我列出存储桶的密钥时,它会显示旧密钥,但如果我尝试检索与密钥关联的数据,则不会找到任何数据。当我尝试删除密钥时,它仍然存在。这可能是什么原因?有没有办法清除桶中的密钥,以便从干净的石板开始?我不关心riak中的任何数据,但我宁愿不必再次重新安装所有的东西。riak - 无法删除存储桶中的密钥

回答

4

您可能正在看到旧数据的墓碑。由于Riak是一个最终一致的数据存储,它需要跟踪删除,就好像它们是普通的写入一样,至少在一段时间内。

如果数据存在于一个节点上,而不是另一个节点上,那么如何判断它是否还未传播的PUT或DELETE?

Riak通过使用墓碑解决了这个问题。无论何时删除某些内容,Riak都不会立即擦除数据,而是用已知值删除的特殊值替换现有值。此特殊值包含一个从之前的值开始下降的vclock,以及指示已删除的元数据。因此,在决定上述问题时,Riak只需将该值的vclock与墓碑的值进行比较。无论从哪一个下降,都必须是正确的。

为了解决主要包含墓碑的不断增长的数据大小的问题,墓碑在一段时间后收割。时间使用delete_mode设置进行设置。 DELETE处理完成后,逻辑删除已写入主要vnodes,删除过程将为该密钥发出GET请求。每当GET进程遇到逻辑删除,并且所有主节点都使用相同的逻辑删除响应时,它会根据delete_mode设置安排逻辑删除。

所以,如果你想实际摆脱墓碑,检查你的delete_mode设置,以确保它没有设置为'保持',并为每一个发出一个get来确保它确实消失。

或者,如果您只是擦拭数据存储以重新启动测试,请停止Riak,删除所使用的后端的data_root下的所有文件,然后重新启动。