aerospike:删除集合中的所有记录

aerospike: delete all record in a set

我正在使用 aerospike 进行测试。我正在使用社区 edition.The 集群有 2 个节点。我将存储引擎用作带 SSD 的设备。我的配置文件 -

namespace test {
        replication-factor 2
        memory-size 16G
        default-ttl 0 

       storage-engine device {
                device /dev/sdb1
                data-in-memory false
                write-block-size 128K   
        }
}

我设置了名为数据。在其中添加 1M 记录进行测试后,现在我想删除该集合中的所有内容(如果可能的话也删除集合)。我在两个节点上都试过这个命令-

asinfo -v "set-config:context=namespace;id=test;set=data;set-delete=true;"

它一直有效,直到我重新启动我的集群(sudo /etc/init.d/aerospike restart 在两个节点上)。重启后所有数据都回来了。我经历了这个 link http://www.aerospike.com/launchpad/deleting_sets_and_data.html 但没有找到任何方便的东西。

编辑复制自@sasha 的评论:

Aerospike 3.10.0 引入了[持久删除][1] 机制,将持久性添加到删除中(尽管仅适用于 Aerospike Enterprise)。它是由所谓的墓碑记录实现的,这些记录被写成被删除记录的最后一个版本。它保证冷启动时没有删除的记录进入内存(从磁盘读取)。然后碎片整理过程最终运行并从包括墓碑在内的所有记录版本中释放内存和磁盘space。 [1]: aerospike.com/docs/guide/durable_deletes.html

在我们的生产经验中特别java deletion utility works quite well even without recently introduced durable deletes。你从源代码构建它,把它放在集群附近的某个地方,然后 运行 这样:

java -jar delete-set-1.0.0-jar-with-dependencies.jar -h <aerospike_host> -p 3000 -s <set_to_delete> -n <namespace_name>

然而,在我们的生产环境中,冷重启是非常罕见的事件,基本上是在 aerospike 崩溃时。而且数据流非常高,所以碎片整理会更早开始,我们没有这个僵尸记录问题。

顺便说一句 asinfo 删除方式对我们不起作用。记录在那里停留了几天,所以我们使用 delete-set 实用程序,它立即起作用。

自 2017 年 3 月发布的 Aerospike 3.12 起,数据库现已支持删除集合或命名空间中所有数据的功能。

请参阅以下文档: http://www.aerospike.com/docs/reference/info#truncate

它提供的命令行命令如下所示: asinfo truncate:namespace=;set=;lut=

它也可以从客户端 API 中截断,这里是 java 文档: http://www.aerospike.com/apidocs/java/com/aerospike/client/AerospikeClient.html 并向下滚动到 "truncate" 方法。

请注意,此功能可以选择指定时间。这允许您删除记录,然后开始插入新记录。由于使用了时间戳,请确保您的服务器时钟同步良好。

另请注意,在企业版中,这些删除是持久的并且在重启后仍然存在。