>"The main purposes of explicit locks are (1) to prevent expensive handling of 
>update conflict errors in heavily loaded application"
>
>this is the exact reason I try to avoid conflicts. My threads can wait but 
>they should not raise exceptions.
>
>I always though that it is possible to avoid such conflicts on the database 
>level.

In some cases it might be possible to avoid lock conflickts by using INSERT 
rather than UPDATE. Typically, you may have a trigger or something similar that 
inserts into a summary table, and then you have a separate process running at 
regular intervals that update the summary tables. E.g. you could have an 
inventory table originally with three items, and then insert into this table 
when things are sold or bought.

Inventory
Product InStock
1        75 --Items originally in stock
2       350 --Items originally in stock
3        54 --Items originally in stock
1         -5 --Sold five items
1         -2 --Sold two items
3         -8 --Sold eight items
1       100 --Bought hundred more items
1         -3 --Sold three items

This does require programs using SUM(InStock) rather than just InStock when 
selecting, but you should never get lock conflicts. Every night (or every hour 
or week or whenever, just make sure it doesn't run several instances 
concurrently) you could run the following procedure:

CREATE PROCEDURE UpdateStock AS
  DECLARE VARIABLE id INTEGER;
  DECLARE VARIABLE NoOfItems INTEGER;
BEGIN
  FOR SELECT Product, sum(InStock)
  FROM Inventory
  GROUP BY 1
  INTO :id, :NoOfItems DO
  BEGIN
    DELETE FROM INVENTORY
    WHERE Product = :id;
    INSERT INTO INVENTORY(Product, InStock)
    VALUES (:id, :NoOfItems);
  END
END

Don't know whether this is applicable to your situation or not, but

HTH,
Set
    • ... brucedickin...@wp.pl [firebird-support]
  • ... Hugo Eyng hugoe...@msn.com [firebird-support]
    • ... brucedickin...@wp.pl [firebird-support]
      • ... 'Walter R. Ojeda Valiente' sistemas2000profesio...@gmail.com [firebird-support]
        • ... brucedickin...@wp.pl [firebird-support]
          • ... 'Walter R. Ojeda Valiente' sistemas2000profesio...@gmail.com [firebird-support]
            • ... brucedickin...@wp.pl [firebird-support]
              • ... 'Walter R. Ojeda Valiente' sistemas2000profesio...@gmail.com [firebird-support]
              • ... 'Walter R. Ojeda Valiente' sistemas2000profesio...@gmail.com [firebird-support]
              • ... brucedickin...@wp.pl [firebird-support]
      • ... Svein Erling Tysvær svein.erling.tysv...@kreftregisteret.no [firebird-support]
        • ... brucedickin...@wp.pl [firebird-support]
  • ... Ann Harrison aharri...@ibphoenix.com [firebird-support]
    • ... 'Walter R. Ojeda Valiente' sistemas2000profesio...@gmail.com [firebird-support]
      • ... hv...@users.sourceforge.net [firebird-support]
        • ... brucedickin...@wp.pl [firebird-support]
        • ... 'Walter R. Ojeda Valiente' sistemas2000profesio...@gmail.com [firebird-support]
          • ... hv...@users.sourceforge.net [firebird-support]
            • ... 'Walter R. Ojeda Valiente' sistemas2000profesio...@gmail.com [firebird-support]

Reply via email to