我正在使用aerospike进行测试。我正在使用社区版。集群有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
)才有效。重启后,所有数据都恢复了。我浏览了这个链接http://www.aerospike.com/launchpad/deleting_sets_and_data.html,但找不到任何方便的东西。
答案 0 :(得分:3)
从@ sasha的评论粘贴的EDIT副本:
Aerospike 3.10.0引入了[持久删除] [1]机制,将持久性添加到删除中(仅适用于Aerospike Enterprise)。它是由所谓的Tombstone记录实现的,这些记录被写为被删除记录的最后一个版本。它保证在冷启动时没有删除记录进入内存(从磁盘读取)。然后,碎片整理过程最终运行并从包括墓碑的所有记录版本中释放内存和磁盘空间。 [1]:aerospike.com/docs/guide/durable_deletes.html
答案 1 :(得分:2)
自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”方法。
请注意,此功能可以选择采用时间规范。这允许您删除记录,然后开始插入新记录。使用时间戳时,请确保您的服务器时钟同步良好。
另请注意,在企业版中,这些删除操作是持久的,并且可以在重新启动后继续使用。
答案 2 :(得分:1)
在我们的制作体验中,即使最近没有引入java deletion utility,特殊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>
然而,在我们的生产环境中,冷启动是非常罕见的事件,基本上是在空气动力学崩溃时。并且数据流量非常高,因此碎片整理在早期开始,我们没有这个僵尸记录问题。
BTW asinfo
删除方式对我们没有用。记录在那里停留了几天,所以我们使用delete-set
实用工具立即工作。