Я имею в виду проект, в котором я буду использовать базу данных SQL для хранения строк с датой истечения срока в днях. Каждый день я буду чистить базу данных с просроченными строками. Я рассматриваю два решения:

1

Сохраните expiration как целое число дней в будущем. Тогда каждый день

  1. Пройдите базу данных и вычтите 1 до expiration действия каждой строки.
  2. Удалить строки с expiration меньше или равным 0 .

2

Сохраните expiration как время UNIX в будущем. Потом каждый день

  1. Поиск в базе данных строк, expiration действия которых меньше или равен текущему времени UNIX.

Мне кажется, вариант 2 лучше, потому что:

  1. Это потребует меньше записи в базу данных. Могут быть дни, когда ничего не пишется с опцией 2, но опция 1 всегда будет изменять каждую строку
  2. Если сценарий обслуживания не будет запущен один день, 1 будет отставать, а 2 могут догнать.

Итак, мои вопросы:

  1. Я прав? Является ли 2 лучшим вариантом, или я что-то упустил?
  2. Есть ли третий вариант, который в целом превосходит?

1 ответ1

1

Относительные времена истечения в подавляющем большинстве случаев уступают абсолютным - просто подумайте, что пропущенная (или хуже: половинная) работа cron может означать относительное время.

Единственный известный мне случай, когда относительные времена превосходят друг друга, это когда они нужны в их относительной форме так часто, что необходимые вычисления начинают иметь значение. Это нереально вне небольшого количества очень специализированных приложений.

Итак: Да, использование UNIX-метки момента истечения времени имеет больше смысла.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .