Userei un semplice campo timestamp nel database per indicare "bloccato". Ogni volta che qualcuno tenta di prenotare la camera, il software confronta l'ora corrente con il timestamp, e se sono> di 20 minuti e il pagamento non è stato effettuato, il blocco non è valido.
Questo metodo è probabilmente sufficientemente efficiente. Un timestamp è in genere di 32 bit e le prestazioni delle chiamate al database con confronto sono trascurabili.