2015-07-13 68 views
1

讀取多個記錄我有一個命名空間測試設置用戶在塞式數據庫。我通過控制檯上的以下命令在用戶中添加四條記錄:獲取空的記錄,而在塞式

ascli put test users barberakey '{"username":"Barbera","password":"barbera","gender":"f","region":"west","company":"Audi"}' 

通過aql命令,我可以查看這四條記錄。 aql> select * from test.users。

我知道逐個獲取記錄的方法,它在我身邊運行良好,但對於我的任務而言,這是非常昂貴的操作。我想要讀取多個記錄(批量讀取)並對它們執行多個算法。我接受https://www.aerospike.com/docs/client/java/usage/kvs/batch.html的指導,編寫如下代碼:

Key [] keys = new Key [4];

   for (int i = 0; i < 4; i++) { 
        keys[i] = new Key("test", "users", (i + 1)); 
        System.out.println("Keys: "+keys[i]); 
       } 

       Record[] records = client.get(batchPolicy, keys); 
       System.out.println("Length of Records : "+records.length); 
       for(int a=0;a<records.length;a++){ 
        System.out.println("RECORDS IN ARRAY: "+records[a]); 

       } 

但問題是,它讀取鍵,但給數組記錄爲空。

Output: 
Reading records from Aerospike DB 
Keys: test:users:1:3921e84015258aed3b93d7ef5770cd27b9bb4167 
Keys: test:users:2:1effb3ce25b23f92c5371dee0ac8e6b34f5703c6 
Keys: test:users:3:d17519d72e22beab2c3fa1552910ea3380c262bd 
Keys: test:users:4:3f09a505c913db8ad1118e20b78c5bb8495fb0f9 
Length of Records : 4 
RECORDS IN ARRAY: null 
RECORDS IN ARRAY: null 
RECORDS IN ARRAY: null 
RECORDS IN ARRAY: null 

請指導我的情況。

......

+0

當你跑這個時,是否有任何遷移?你能提供'asadm -e info'的輸出嗎? – kporter

+1

遷移期間,批處理請求可能不會返回所有值;當前的批處理實現不會代理批處理內的請求。即將發佈的3.6.x版本將包含一個新的批處理操作,該批處理操作以更高的優先級運行,並且將代理如果記錄可能存在於另一個節點上。 – kporter

+0

你有什麼想法,我怎樣才能達到我的目的?其實我得到的記錄,然後保存到一個arrayList,然後對其應用操作。我想避免寫入arrayList,並希望直接在記錄上進行操作。 –

回答

2

顯示您使用鍵「barberakey」編寫了記錄。然後通過整數鍵「i + 1」讀取記錄。因此,找不到記錄。

+0

是的,我已經解決了這個問題。無論如何謝謝你的消息。 –