With timestamping, if a transaction attempts to read or write a data item, then the read
or write is only allowed to proceed if the last update on that data item was carried out by
an older transaction. Otherwise, the transaction requesting the read/write is restarted and
given a new timestamp. New timestamps must be assigned to restarted transactions to pre-vent their being continually aborted and restarted. Without new timestamps, a transaction
with an old timestamp might not be able to commit owing to younger transactions having
already committed.
Besides timestamps for transactions, there are timestamps for data items. Each data item
contains a read_timestamp , giving the timestamp of the last transaction to read the item, and a write_timestamp, giving the timestamp of the last transaction to write (update) the item.
For a transaction T with timestamp ts(T), the timestamp ordering protocol works as follows.