Re: Serializability of Transactions and Automatic (Number) Generators

From: Costin Cozianu <c_cozianu_at_hotmail.com>
Date: Wed, 24 Nov 2004 22:04:34 -0800
Message-ID: <30lb06F2v300eU1_at_uni-berlin.de>


I guess I forgot to add that since the only valid deduction about values generated by a sequence generators is that those values are distinct across different invocations, than the preservation of this property is trivial under even less than serializable isolation levels.

Costin Cozianu wrote:
> Yes, this reminds me in some way of a discussion I had with Alistair
> Cockburn on his assertion that reflective environmnet breaks Liskov
> Substitution Principle for objects.
>
> I.e that a function
>
> f(BaseType o) {
> return o.getClass().getName();
> }
>
> will return different results for an object of the base class and the
> derived class.
>
> I replied that this doesn't break LSP because LSP does not guarantee a
> fixed result for such a function, but actually guarantees that all the
> logical derivation from contracts (pre-conditions => post-conditions)
> would hold when at runtime objects of derived classes are substituted.
>
> Since in the above, in presence of reflection and subtyping one cannot
> derive that result=="BaseType" no contract is broken.
>
>
> Similarly (although I don't know of anybody who did it) in database
> history, we can define serializability to mean *not* that the same image
> of the database is obtained (which clearly is impossible with Oracle
> sequences and similar generators), but rather that all logical
> derivations about what conditions hold true in the end, are kept
> invariant under all serializabe histories.
>
> just my 2c,
> Costin
>
> Jonathan Leffler wrote:
>

>> In general, a set of transactions is considered serializable if it is 
>> equivalent to some serial execution of the same transactions (for 
>> example, see Bernstein, Hadzilacos and Goodman "Concurrency Control 
>> and Recovery in Database Systems", section 1.3 "Serializability").
>>
>> Modern DBMS usually have one or more ways of automatically generating 
>> values during a transaction - Oracle (and most other DBMS) have 
>> SEQUENCE types; Informix has the SERIAL type; other DBMS have other 
>> similar constructs.
>>
>> In general, the values automatically generated during a transaction 
>> are not generated again, even if the original transaction is rolled 
>> back.  Further, there is nothing to stop a pair of transactions from 
>> alternately generating new values - V(n) to TxA, V(n+1) to TxB, V(n+2) 
>> to TxA, V(n+3) to TxB, and so on.
>>
>> Does this mean that such transactions are inherently non-serializable, 
>> or does it mean that the specific values generated by a transaction 
>> are not material for the discussion of equivalence of executions?
>>
>> If TxA were executed before TxB, it would obtain the values V(n) and 
>> V(n+1) -- rather than V(n) and V(n+2) as shown above -- but for all 
>> practical purposes, the results are equivalent: two new unique values 
>> unused by any other transaction were generated and the specific values 
>> are immaterial.
>>
>> Any thoughts?
>>
Received on Thu Nov 25 2004 - 07:04:34 CET

Original text of this message