2016-07-15 69 views
1

對於數據量不是很大的情況,我們將所有密鑰都存儲在List中的一個bin中。如何有效地將鑰匙保存在Aerospike中?

但是bin的大小有限制。

函數scanAll與Java客戶端中的ScanCallback實際上工作非常緩慢,所以我們不能在我們的項目中負擔得起。當你給他鑰匙時,Aerospike工作得很快。

現在我們有一些集合,其中有很多記錄和密鑰。什麼是最好的方式來存儲所有的密鑰,或者有一些方法可以讓它快速,沒有scanAll?

+0

不知道我完全理解,這是否有幫助:http://www.aerospike.com/apidocs/java/com/aerospike/client/policy/Policy.html#sendKey – kporter

+0

@kporter,我已經他們。但問題是快速獲取它們。 –

回答

1

由於存在4K個邏輯分區,掃描小型組當前是低效率的操作,並且掃描線程必須在掃描期間減少每個分區。小集合不一定在所有分區中都有記錄,所以你需要花費不計的掃描開銷。這在未來的版本中可能會發生變化,但現在是這種情況。

有兩種方式來獲得所有記錄在一組速度快:

  1. 如果你確實知道密鑰空間是什麼樣的,你可以遍歷批量讀取,以獲取它們(也可以是並行完成)。嘗試在批量讀取中訪問不存在的密鑰不會導致錯誤,它只會在特定索引中返回沒有值。
  2. 或者,您可以添加一個具有設置名稱的bin,並在該bin上創建一個二級索引,然後查詢所有記錄WHERE setname=XYZ。對於一小部分,這將比掃描快得多。