2015-02-06 94 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