В информатике , в частности в области баз данных , правило записи Томаса — это правило управления параллелизмом на основе временных меток . Его можно обобщить как игнорировать устаревшие записи .
В нем говорится, что если более поздняя транзакция уже записала значение объекта, то более ранней транзакции не нужно выполнять запись, поскольку более поздняя в конечном итоге перезапишет его.
Правило записи Томаса применяется в ситуациях, когда транзакциям назначается предопределенный логический порядок при их запуске. Например, транзакции может быть назначена монотонно увеличивающаяся временная метка при ее создании. Правило предотвращает изменение порядка выполнения транзакций, приводящее к созданию различных выходов: Выходы всегда будут соответствовать предопределенному логическому порядку.
Например, рассмотрим базу данных с 3 переменными (A, B, C) и двумя атомарными операциями C := A (T1) и C := B (T2). Каждая транзакция включает чтение (A или B) и запись (C). Единственный конфликт между этими транзакциями — запись в C. Ниже приведен один из возможных графиков операций этих транзакций:
Если (при создании транзакций) T1 назначается временная метка, которая предшествует T2 (т.е., согласно логическому порядку, T1 идет первым), то должна быть видна только запись T2. Если же запись T1 выполняется после записи T2, то нам нужен способ обнаружить это и отменить запись.
Один из практических подходов к этому — пометить каждое значение меткой времени записи (WTS), которая указывает метку времени последней транзакции по изменению значения. Для реализации правила записи Томаса требуется только проверить, больше ли метка времени записи объекта, чем метка времени транзакции, выполняющей запись. Если это так, запись отменяется
В приведенном выше примере, если мы назовем TS(T) временной меткой транзакции T, а WTS(O) временной меткой записи объекта O, то запись T2 устанавливает WTS(C) в TS(T2). Когда T1 пытается записать C, он видит, что TS(T1) < WTS(C), и отменяет запись. Если бы третья транзакция T3 (с TS(T3) > TS(T2)) затем записала в C, она бы получила TS(T3) > WTS(C), и запись была бы разрешена.
©