Требование: У меня есть пакетное задание, которое обрабатывает 1 миллион записей. Я храню 1 миллион записей в Arraylist и повторяю его, чтобы сделать сторонний внешний вызов для каждой записи. Теперь требование - третье лицо отправит HTTP-ответ 200 или 400 или 500. В единственном случае ответ 500, я должен обновить базу данных для этой конкретной записи.Application Design с вызовом базы данных в многопоточной среде
Задача: Чтобы ускорить обработку, я пытаюсь реализовать потоки для стороннего вызова. Но я застрял в том, что после выполнения потоковой обработки, как я могу обработать ответ от стороннего вызова, чтобы сделать обновление базы данных. Я не хочу включать обновление БД в поток, потому что если есть несколько потоков, пытающихся обновить БД, там будет тупик БД.
Мое усилие: То, что я пытался, - объявить одноэлементный arraylist и сохранить номер записи, для которого ответ от стороннего вызова равен 500 в одиночном объекте. Когда все сторонние вызовы будут завершены, я бы перебрал этот одноадресный arraylist для извлечения записей и обновления в БД.
RoadBlock: Даже в этом случае я не могу понять, как я могу сделать последовательность потоков последовательной, чтобы я мог хранить запись в singleton arraylist.
Код:
class callExtPrty implements Runnable{
public callExtPrty(String recordNumber)
this.recordNumber = recordNumber;
public void run(){
int response = externalCall(String recordNumber);
if response == 500
singletonList.add(recordNumber);
}
class recordProcessorDAO{
public void processRecords(){
List<String> dbRecordList= new ArrayList<String>();
//DB call to add 1 million records to dbRecordList
Iterator<String> recordList = dbRecordList.iterator();
while (recordList.hasNext()) {
new callExtPrty(recordList.next());
}
//Getting the singleton list populated by the 3rd party call
Iterator<String> singletonList = singletonList.iterator();
while (singletonList .hasNext()) {
//DB call to update the record fetched from singletonList
}
}
Может кто-нибудь помочь мне в получении этого разработан надлежащим образом. Реализация Threading должна быть реализована для повышения производительности, так как работа обрабатывает 1 миллион записей за один проход, а задание работает около 12-13 часов.
Благодаря