Tôi có một chuỗi chạy liên tục trong Ứng dụng của tôi, bao gồm một HashSet để lưu trữ tất cả các ký hiệu bên trong Ứng dụng. Theo thiết kế tại thời điểm nó được viết, bên trong Thread trong khi điều kiện thực, nó sẽ lặp lại hashset liên tục và cập nhật Database cho tất cả các ký hiệu chứa bên trong HashSet.Phân vùng a Đặt thành các Tập hợp con nhỏ hơn và xử lý theo lô
Biểu tượng tối đa có thể có mặt bên trong bộ băm sẽ khoảng 6000. Tôi không db với tất cả 6000 ký tự cùng một lúc, nhưng chia hashset này thành các tập con khác nhau là 500 (12 bộ) và thực thi từng tập con riêng lẻ và có một chuỗi ngủ sau mỗi tập con trong 15 phút, vì vậy tôi có thể giảm áp lực lên cơ sở dữ liệu.
Đây là mã của tôi, (đoạn mã mẫu)
Làm thế nào tôi có thể phân vùng một Set thành các tập con nhỏ hơn và quá trình, (tôi đã thấy những ví dụ cho partioning ArrayList, TreeSet, nhưng không tìm thấy bất kỳ ví dụ liên quan để 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);
}
}
Khái niệm về "áp lực" trên cơ sở dữ liệu là một trong những kỳ lạ ... DBS là thường rất tốt để có thể xử lý "áp lực" một cách duyên dáng. – TwoThe