Как правильно реализовать систему версий для записей таблиц?
Есть таблица fileState
в БД. С полями fileId INT
, version SMALLINT UNSIGNED
.
По крону срабатывает скрипт, который сравнивает версию файла во время последней проверки и текущую версию. Если версия поменялась, стала больше, например, то происходит его дальнейшая обработка, иначе, пропускаем этот файл.
Сейчас во время обновления файла вызывается следующий запрос:
UPDATE fileState SET version = IF(version = 255, 0, version+1) WHERE fileId = $fileId;
Однако, может возникнуть ситуация, когда крон не срабатывал и последняя его версия - 0, а файл обновлялся и после версии 255 стал 0, что при запуске приведёт к пропуску файла.
Как можно этого избежать? Какой тип данных для версий использовать менее затратно и по времени и по весу? Может FLOAT
и хранить версии так: 0.0, ..., 0.9, 0.11, ..., 0.59
? (Пропуская десятки 9 -> 11
, 99 -> 111
)