2014-12-01 21 views
10

Il client Aerospike ha il metodo scanAll per leggere tutte le righe dal suo negozio. Io lo uso nel codice folowing:Aerospike: come posso ottenere la chiave di registrazione?

ScanPolicy policy = new ScanPolicy(); 
policy.concurrentNodes = true; 
policy.priority = Priority.DEFAULT; 
policy.includeBinData = true; 
policy.scanPercent = 100; 

client.scanAll(policy, "namespaceName", "setName", new ScanCallback() { 
    @Override 
    public void scanCallback(Key key, Record record) throws AerospikeException { 
     STORE.put(key.userKey.toLong(), record.getValue("binName").toString()); 
    } 
}); 

ma è finito con NullPointerException, perché UserKey è nullo. Tutti gli altri campi sono validi come previsto. Chiave utente è il valore a lungo, che è stato utilizzato per il salvataggio dei dati:

client.put(writePolicy, new Key("namespaceName", "setName", userKey), new Bin("binName", value)); 

Tutto va bene, se lo faccio un'unica richiesta in questo modo:

client.get(readPolicy, new Key("namespaceName", "setName", userKey)); 

cosa può essere sbagliato? Perché userKey è nullo?

risposta

15

Aerospike utilizza il nome della chiave e del set per generare un digest univoco, quindi memorizza solo digest.

Mentre si inserisce un record se si imposta writePolicy.sendKey = true, la chiave verrà memorizzata come metadati del record. Se viene inserito un record con writePolicy.sendKey = true, solo in scanCallback() verrà visualizzata la chiave.

Per impostazione predefinita writePolicy.sendKey è false, quindi per impostazione predefinita scanCallback() diventa null come chiave. Ecco perché il tuo key.userKey.toLong()NullPointerException.

+1

Grazie mille per il vostro tempo e buona risposta! – DmitryKanunnikoff

3

Anch'io ho affrontato questo problema anche al momento della stesura di WritePolicy.sendkeys = true.

Dopo il debug di 2-3 giorni è stato riscontrato un problema con la versione del client di aerospike. Inizialmente stavo usando 3.0.25 ma dopo averlo aggiornato alla 3.0.35 ha iniziato a funzionare bene.

Problemi correlati