Я пытаюсь создать класс java, который будет подключаться к онлайн-службе, искать значение и затем обновлять это значение в моей базе данных. Это относительно простая задача, но поскольку это большой набор значений, у меня есть условие выполнения этой задачи в кусках данных (скажем, 100). (?)Сценарий синхронизации в Java
Так что ServiceSyncer класс должен выполнить следующий псевдокод:
while (select Objects where timestamp < today, limit 100) returns items {
foreach Object {
try {
connect to Service for Object.attribute
extract attribute value
If attribute value has changed {
update Object {
set attribute value
}
}
} catch exception {
log exception
}
update timestamp = now()
}
}
Этот цикл будет обновлять все объекты в куски 100, пока все объекты не будут посмотрел. Объекты, которые не выполнялись во время поиска, останутся неудачными, пока в следующий раз синхронизация не будет выполнена.
Что было бы концептуально хорошим подходом к решению этой проблемы?
** Приведенный выше псевдокод выглядит менее устаревшим при попытке его реализовать.
Нечто подобное будет работать, но я интересно, если есть лучший способ
JAVA
boolean keepProcessing = true;
int startIndex = 0;
int endIndex = 0;
while (keepProcessing) {
endIndex = startIndex + 100;
if (endIndex > publist.size() - 1) {
endIndex = publist.size() - 1;
keepProcessing = false;
}
List<ObjectJPA> currentBatchList = publist.subList(startIndex, endIndex);
for (int i = 0; i < currentBatchList.size(); i++) {
// do staff
}
repository.save(currentBatchList);
}
Не уверен, что вы подразумеваете под «Что было бы концептуально хорошим подходом к решению этой проблемы?», Похоже, у вас есть концепция. – Taylor
@ Тейлор Когда я пытаюсь реализовать его, я сталкивался с проблемами; особенно потому, что я решил сделать это в кусках данных. Кажется, что это невозможно сделать за один шаг. –
Возможно, проблемы связаны с деталями вашей реализации. Ваш псевдо-код кажется прекрасным, но реализация такого рода вещей может быть искажена деталями запроса, проблемами границ транзакций и т. Д. – Taylor