2016-03-29 7 views
0

Aerospike benötigt fast 70 Minuten, um 10 Millionen Schlüsselwerte einzugeben. Schritte, die ich folgen einzufügen sind:Aerospike dauert zu lange, um 10 Millionen Schlüsselwerte einzugeben

  1. Ich habe alle Schlüsselwert im Speicher

  2. Register Aero-Spike UDF auf Aero-Spike-Server

  3. Start 10 Millionen Mal für Java-Code iteriert und rufen Aero-Spike UDF Modul für jeden Schlüssel und Wert.

  4. In udf, ich überprüfe, ob Schlüssel bereits vorhanden ist. Wenn ja dann update sonst einfügen.

  5. Ich habe 2 Aero-Spike-Server mit Replik Faktor 2.

Gibt es eine Möglichkeit der Schreibleistung zu erhöhen oder Batch-Schreib auszuführen. Ich weiß, dass Aerospike das Batch-Schreiben nicht unterstützt. Irgendein Vorschlag zur optimierten Schreiboperation.

Code, den ich verwendet

private void put(String namespace, String setName, String binName, String keyVlaue, List<Integer> listIdsToBeAdd, List<Integer> listIdToBeRemoved) { 
    Key key = new Key(namespace, setName, keyVlaue); 
    getAerospikeClient().execute(writePolicy, key, "aerospike_udf", "update_record", Value.get(listIdsToBeAdd), Value.get(listIdToBeRemoved), Value.get(binName)); 
} 

UDF-Modul

function update_record(record, list1, list2, bin_name) 
    local store_list = record[bin_name] 
    -- get a list from database record. Create one if it doesn't exits 
    if store_list == nil then 
    store_list = map() 
    end 

    if list2 then 
    for i=1, #list2 do 
     map.remove(store_list, list2[i]) 
    end 
    end 

    if list1 then 
    for i=1, #list1 do 
     store_list[list1[i]] = 1 
    end 
    end 

    if map.size(store_list) == 0 then 
    record[bin_name] = nil 
    else 
    record[bin_name] = store_list 
    end 

    if not aerospike:exists(record) then 
    aerospike:create(record) 
    else 
    aerospike:update(record) 
    end 
end 
+0

Können Sie ein kurzes Beispiel veröffentlichen, das dies reproduziert? Wenn Sie etwas falsch machen, sehen wir es möglicherweise im Code. –

+0

Warum hat jemand das abgelehnt? Ist diese sehr einfache, wiederholte Frage, irrelevant oder auch nur diese Person die Lösung? – visingh

+1

@PeterLawrey Ich habe die Frage aktualisiert. – visingh

Antwort

1

Anstelle des Sync-Client Aerospike, auszuführen i beginnen mit Async Aerospike-Client. Jetzt kann ich 10 Millionen Aufnahmen innerhalb von ~ 2.6 Minuten einfügen.

Verwandte Themen