Partition einen Satz in kleinere Teilmengen und als batch-Prozess
Habe ich einen kontinuierlichen Laufenden thread in meine Anwendung besteht aus einem HashSet speichern alle Symbole, die innerhalb der Anwendung .
Wie pro das design an die Zeit, als es geschrieben wurde , innerhalb des Thread ' s, während die wahre Bedingung wird die Iteration der hashset continosly und aktualisiert die Datenbank für alle Symbole, die enthalten innen HashSet .
Des max-Symbole, die vorhanden sein könnten innerhalb der hashset wird auf rund 6000 .
Ich nicht die db mit allen 6000 Symbole auf einmal , sondern teilen Sie diese hashset in verschiedene Teilmengen von 500 Stück (12 Sets ) und führen jede Teilmenge einzeln und haben ein Gewinde Schlaf nach jeder Teilmenge für 15 Minuten , also taht ich kann reduzieren Sie den Druck auf Datenbank .
Dies ist mein code (Beispiel-code-snippet )
Wie kann ich der Partition einen Satz in kleinere Untergruppen und Prozess , ( die ich gesehen habe, die Beispiele für Aufteilungen ArrayList , TreeSet , aber nicht finden B. im Zusammenhang mit HashSet )
package com.ubsc.rewji.threads;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
import java.util.concurrent.PriorityBlockingQueue;
public class TaskerThread extends Thread {
private PriorityBlockingQueue<String> priorityBlocking = new PriorityBlockingQueue<String>();
String symbols[] = new String[] { "One", "Two", "Three", "Four" };
Set<String> allSymbolsSet = Collections
.synchronizedSet(new HashSet<String>(Arrays.asList(symbols)));
public void addsymbols(String commaDelimSymbolsList) {
if (commaDelimSymbolsList != null) {
String[] symAr = commaDelimSymbolsList.split(",");
for (int i = 0; i < symAr.length; i++) {
priorityBlocking.add(symAr[i]);
}
}
}
public void run() {
while (true) {
try {
while (priorityBlocking.peek() != null) {
String symbol = priorityBlocking.poll();
allSymbolsSet.add(symbol);
}
Iterator<String> ite = allSymbolsSet.iterator();
System.out.println("=======================");
while (ite.hasNext()) {
String symbol = ite.next();
if (symbol != null && symbol.trim().length() > 0) {
try {
updateDB(symbol);
} catch (Exception e) {
e.printStackTrace();
}
}
}
Thread.sleep(2000);
} catch (Exception e) {
e.printStackTrace();
}
}
}
public void updateDB(String symbol) {
System.out.println("THE SYMBOL BEING UPDATED IS" + " " + symbol);
}
public static void main(String args[]) {
TaskerThread taskThread = new TaskerThread();
taskThread.start();
String commaDelimSymbolsList = "ONVO,HJI,HYU,SD,F,SDF,ASA,TRET,TRE,JHG,RWE,XCX,WQE,KLJK,XCZ";
taskThread.addsymbols(commaDelimSymbolsList);
}
}
- Das Konzept der "Druck" auf Datenbanken ist eine seltsame... DBs sind in der Regel sehr gut in der Lage, dies zu behandeln "Druck" anmutig.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Etwas wie
Haben Sie jetzt partitioniert die
originalSet
in 12 anderen HashSets.Mit Guave:
Können wir den folgenden Ansatz zur Aufteilung einer Menge.
Werden wir mit der Ausgabe als
[a, b]
[c, d]
[e]`
Sehr einfache Art und Weise für Ihre tatsächliche problem wäre, ändern Sie Ihren code wie folgt:
Einer Allgemeinen Methode wäre, um den iterator zu nehmen die Elemente nacheinander in eine einfache Schleife: