2015-02-06 99 views

回答

0

请注意,您需要重新启动节点(逐个避免停机),因为您不会检索剩余空间的垃圾箱。

我的意思是Aerospike中箱子的最大限制是32,767。如果您只是删除并重新创建了多次设置,如果每次创建10000个分档,则第四次将无法创建超过2,767个分档,因为分档计数器保存在内存中。

如果你重新启动你的群集,它将被释放。

+0

限制在bin _names_上,当然不是实际的bin。 地图没有限制。如果您在垃圾箱内使用地图,则可以使用尽可能多的名称。 – 2017-03-30 23:36:06

2

您也可以删除一组与Java客户端如下:

(1)使用客户端 “执行” 的方法,这对所有查询行施加一个UDF

AerospikeClient.execute(WritePolicy policy, Statement statement, String packageName, String functionName, Value... functionArgs) throws AerospikeException

( 2)定义语句,以包括给定的所有行:

Statement statement = new Statement(); 
statement.setNamespace("my_namespace"); 
statement.setSetName("my_set"); 

(3)指定删除定记录一个UDF:

function delete_rec(rec) 
    aerospike:remove(rec) 
end 

(4)调用方法:

ExecuteTask task = AerospikeClient.execute(null, statement, "myUdf", "delete_rec") 
task.waitTillComplete(timeout); 

它是高性能?不清楚,但我的猜测是asinfo比较好。但是对于测试/调试/设置非常方便。

+0

我建议查看3.12中介绍的新“截断”功能:http://www.aerospike.com/docs/reference/info#truncate – 2017-03-30 02:37:56

0

您不能动态地从RDMS中的“drop table”这样的名称空间中删除一个集合。

使用asinfo只有一套里面懒洋洋地删除数据下面的命令:

asinfo -v "set-config:context=namespace;id=namespace_name;set=set_name;set-delete=true;" 

有一个post关于它的讨论塞的网站,我没有看到这个问题上取得进展呢。

+0

您可以从Aerospike 3.12开始。 – 2017-03-30 02:36:27

+0

@BrianBulkowski酷〜 – 2017-03-30 11:09:40

0

您不能删除一个集合,但可以通过扫描所有记录并逐个删除,删除集合中存在的所有记录。 C#示例代码,将这样的伎俩:

AerospikeClient.ScanAll(null, AerospikeNameSpace, category, DeleteAllRecordsCallBack); 

这里DeleteAllRecordsCallBack是一个回调函数在那里你可以删除记录一个接一个。这个回调函数被所有记录调用。

private void DeleteAllRecordsCallBack(Key key, Record record) 
{ 
    AerospikeClient.Delete(null, key); 
} 
0

在我们的生产经验,特别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工具马上工作。

1

从2017年3月发布的Aerospike 3.12开始,数据库现在支持删除集合或名称空间中所有数据的功能。

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

它提供了命令行命令,看起来像: asinfo截断:命名空间=;设置=; LUT =

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

请注意,此功能可以选择时间规格。这允许您删除记录,然后开始插入新记录。随着时间戳的使用,请确保您的服务器时钟很好地同步。

0

还有就是要做到这一点作为塞式服务器3.12.0版本的新和更好的方式,于2017年月发布:

asinfo -v "truncate:namespace=namespace_name;set=set_name" 

此之前的命令已被弃用,并且只能达到3.12塞式。 1,发布了2017年4月:

asinfo -v "set-config:context=namespace;id=namespace_name;set=set_name;set-delete=true;" 

新的命令是在几个方面较好:

  • 可以b而数据被写入到该组
  • 是足够的迁移期间上运行它只是一个集群

我用它在这些条件下的节点(迁移

  • 期间发出的电子可以发出而数据正在写入1个节点上),并且运行速度非常快。一个拥有3000万条记录的集合在大约6秒内被减少到1000条记录。 (那些1000条记录想必那6秒内写的那些)

    详细here