Riak:$bucket 在生产中安全吗?

Riak: is $bucket safe in production?

我需要清理一个庞大的 riak 数据库中的几个桶。对于某些存储桶,因为我们有索引,所以我只是查询了那些并删除了键。但现在我正在处理两个没有任何索引的桶。正如我多次阅读的那样,我不应该在生产系统上使用 keys?keys=truekeys?keys=stream,但是获取所有密钥的另一种方法是使用 $bucket 索引,如建议的那样 in the documentation,它不会警告不要在生产中使用它。我相信这以前也被称为 $keys。我们的系统似乎适用于任何一个。

然而,就在 运行 将其投入生产之前,我一直在玩弄并发现 $bucket 索引 returns 键已被删除,就像 keys?keys=true/stream,而当我使用我们自己维护的索引时情况并非如此。

在生产中使用 $bucket 索引安全吗?

请注意,我们的系统 运行s 在 LevelDB 后端,有人告诉我它是桶范围的,因此即使 运行keys?keys=true/stream就可以了。这是真的吗?

实际情况是,在使用 $bucket 或 $key 时无法保证,尤其是与 Map/Reduce 结合使用时,它们不会影响集群的稳定性。但是,如果您知道存储桶中的键数量相对较少,或者如果您在查询中使用 max_results - 那么 $bucket 应该相对安全(当然比使用列表键好很多)。

有更安全的方法 erasing masses of keys in Riak KV 2.9.1,无论后端如何(假设使用 Tictac AAE)都可用。

至于 $bucket 或 $key 查询 returning 删除的键,我怀疑这很可能是真的,因为这是一个 "internal" leveldb 查询并且在 leveldb 中它 wan能够区分 Riak 对象和 riak 墓碑。 Riak 2.9.x 中的改进处理了这种情况,并且不会 return 删除密钥(除非您正在寻找墓碑来收割)。