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
Ich habe alle Schlüsselwert im Speicher
Register Aero-Spike UDF auf Aero-Spike-Server
Start 10 Millionen Mal für Java-Code iteriert und rufen Aero-Spike UDF Modul für jeden Schlüssel und Wert.
In udf, ich überprüfe, ob Schlüssel bereits vorhanden ist. Wenn ja dann update sonst einfügen.
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
Können Sie ein kurzes Beispiel veröffentlichen, das dies reproduziert? Wenn Sie etwas falsch machen, sehen wir es möglicherweise im Code. –
Warum hat jemand das abgelehnt? Ist diese sehr einfache, wiederholte Frage, irrelevant oder auch nur diese Person die Lösung? – visingh
@PeterLawrey Ich habe die Frage aktualisiert. – visingh