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.
InformationsquelleAutor Pawan | 2013-10-17
Schreibe einen Kommentar