Всем привет!
Такой вопрос есть батч(пакет)-джоба, которая выполняет апдейт таблици.
PHP код:
run()
{
Trans trans;
Trans buffer;
try
{
while select trans where trans.open == true
{
ttsbegin;
buffer = Trans::find(trans.recid, true);
buffer.open = false;
buffer.update()
ttscommit;
}
}
catch (Exception::Deadlock)
{
retry;
}
catch (Exception::UpdateConflict)
{
retry;
}
}
Если запустить два батча, то что произойдет?
1) Первый батч выбирает из базы например 20 записей
2) Второй батч выбирает из базы теже 20 записей
3) Первы батч апдейтит первую запись - все ок
4) Второй батч апедйтит первую запись - конфликт апдейта
5) Второй батч зановов выбирает с базы, но уже 19 записей
6) Первый бачт апдейтит вторую линию
7) Второй батч апдейтит свою первую линию - кофликт апдейта ....
Получается что второй батч мешает всевремя первому. Можно ли сделать чтобы от двух был выигрышь?
Или я не правлиьно понимаю.
Спасибо!