我需要清理一个大型riak数据库中的几个桶。对于某些桶,因为我们有索引,所以我只是查询并删除了键。但是现在我要处理的是两个没有索引的桶。由于我多次阅读,所以我不应该在生产系统上使用keys?keys=true或keys?keys=stream,但是获取所有键的另一种方法是使用$bucket索引,正如建议的在文件中所建议的那样,在文件中并不警告不要在生产中使用该索引。我相信这之前也被称为$keys。我们的系统似乎与任何一个都有效。
但是,在生产上运行此操作之前,我一直在尝试,发现$bucket索引返回被删除的键,就像keys?keys=true/stream一样,而当我使用我们自己维护的索引时,情况并非如此。
在生产中使用$bucket索引安全吗?
请注意,我们的系统运行在LevelDB后端上,据我所知,这是桶作用域,因此在其上运行keys?keys=true/stream也是安全的。这是真的吗?
发布于 2020-04-15 13:07:42
现实情况是,在使用$bucket或$key时,没有任何保证,特别是如果您将其与Map/Reduce组合在一起,它们不会影响集群的稳定性。但是,如果您知道桶中的密钥相对较少,或者在查询中使用max_results,那么$bucket应该是相对安全的(当然比使用列表键要好得多)。
有更安全的Riak KV 2.9.1中键质量的擦除方法,无论后端(假设使用Tictac )都是可用的。
至于返回已删除键的$bucket或$key查询,我怀疑这很可能是真的,因为这是一个“内部”级别‘t查询,而在级别数据库中,它无法区分Riak对象和riak墓碑。Riak2.9.x中的改进处理了这种情况,并且不会返回已删除的密钥(除非您正在寻找要收获的墓碑)。
https://stackoverflow.com/questions/61224396
复制相似问题