Показать сообщение отдельно
Старый 08.05.2008, 20:49   #7  
Volodymyr is offline
Volodymyr
Участник
 
36 / 21 (1) +++
Регистрация: 03.11.2006
Адрес: Киев
TO Stich_MS: К сожалению когда один батч выполняет
PHP код:
select pessimisticLock firstonly trans
    where trans
.open == true

То второй батч при выборе этой же линии, ждет пока снимется лок сделаный первым батчем. Т.е. получается вообще плохо.
To Hyper: вот это подход я понимаю , но всетаки запуск больше двух батчей не приведет к ускорению работы.

Пришлось сделать так:
1) Добавить на таблицу поле Blocked
2) Переделать метод так:
PHP код:
run()
{
    
Trans trans;
    
Trans buffer;
    
boolean setBlocked(boolean _blocked)
    {
        if (
_blocked && trans.blocked)
            return 
false;
 
        
ttsbegin;
        
buffer Trans::find(trans.recIdtrue);
        
buffer.blocked true;
        
buffer.update();
        
ttscommit;
        return 
buffer.blocked;
    }
    try
    {
        while 
select trans where trans.open == true && trans.blocked == false
        
{
            if(
setBlocked(true))
            {
                
ttsbegin;
                
buffer Trans::find(trans.recidtrue);
                ...
                
buffer.open false;
                
buffer.update();
                
ttscommit;
                
setBlocked(false);
            }
        }
    }
    catch (
Exception::Error)
    {
        
setBlocked(false);
    }
    catch (
Exception::UpdateConflict)
    {
        
retry;
    }


Всех с Праздником!