Jag skulle använda ett enkelt tidsstämpelfält i databasen för att indikera "låst". När någon försöker boka rummet jämför programvaran den aktuella tiden med tidsstämpeln, och om det är> än 20 minuter och betalningen inte har gjorts är låset inte giltigt.
Denna metod är förmodligen tillräckligt effektiv. En tidsstämpel är vanligtvis 32-bitar och prestandaträffen på databasanrop med jämförelse försumbar.