Лучший способ удалить «просроченные» бронирования в системе бронирования - PullRequest
0 голосов
/ 31 января 2012

Я строю систему бронирования для некоторых студенческих кабин в CodeIgniter.Вещи начинают сближаться, но у меня есть небольшая проблема, которую нужно решить.

Прямо перед оплатой, резервирование добавляется в базу данных, и поле datetime установлено в 0. Это поле получит текущийвремя, когда платеж подтвержден (из PayPal).Я уже обработал, если они отменяют платеж, нажимая кнопку отмены на PayPal.Но если при попытке настроить платеж возникают ошибки, или пользователь закрывает окно, или время ожидания истекает, строки все равно будут в базе данных.Что я хочу сделать, так это удалить их, возможно, через 20 минут, если им не было задано правильное значение в поле datetime.

EDIT: у меня также есть поле для вставки строки (когда платеж называется).

Какой лучший способ сделать это?

Ответы [ 2 ]

2 голосов
/ 31 января 2012

Во-первых, вам нужно добавить время создания в ваши заказы, иначе у вас не будет возможности различить заказы, созданные три дня назад, и заказы, созданные три миллисекунды назад.

Во-вторых, поймите, что не будет никаких негативных последствий для производительности, если даже несколько сотен неиспользуемых строк в базе данных будут, поэтому это скорее процесс "поддержания чистоты базы данных", чем ситуация "удалить неиспользуемые строки как можно скорее".

Это означает, что вы можете запускать процесс в фиксированное время (например, каждую ночь), который выполняет запрос, подобный следующему:

DELETE FROM booking WHERE datetime = 0 
                      AND create_time < NOW() - INTERVAL 24 HOUR 

Добавление индекса на datetime сделает этот запрос молниеносным независимо от того, сколько действительных бронирований окажется в этой таблице.

2 голосов
/ 31 января 2012

Добавьте другое поле даты, row_created_at и установите его на NOW() при вставке строки.

Также настройте задание cron, которое удалит все строки, где datetime-field равно null, а row_created_at старше 20 минут.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...