我被要求創建一個在線支付的在線預訂系統,我想知道在同一時間爲同一個房間預訂的兩位顧客要做什麼。在線酒店預訂系統,同時預訂?
例如:
與此同時:
customer1表和顧客2預訂了一個標準間僅具有可用1個室。 (房間可用性將顯示仍有1個房間可用)。然後他們同時點擊「確認」按鈕。
我被要求創建一個在線支付的在線預訂系統,我想知道在同一時間爲同一個房間預訂的兩位顧客要做什麼。在線酒店預訂系統,同時預訂?
例如:
與此同時:
customer1表和顧客2預訂了一個標準間僅具有可用1個室。 (房間可用性將顯示仍有1個房間可用)。然後他們同時點擊「確認」按鈕。
使用鎖定構造(可能在數據庫級別),以確保只有一個確認將一次通過。如果可能有這樣的競爭條件,你應該始終這樣做。這樣,您將始終知道誰是第一個,並且您可以告訴其他用戶他們太慢而無法確認。
您可能想要添加的另一件事是付款時間限制。在許多系統中,當您確認某件事情時,您將有一定的時間進行付款以獲得預訂。如果您在這段時間內沒有付款,確認將過期,房間將再次可用。
謝謝先生......我會嘗試在我的系統上實現這些功能,我希望我可以用我當前的Web開發技能來完成這些功能。我在想也許我可以製作一張桌子,在那裏可以記錄未付費的預訂...... – KiiroSora09
@ KiiroSora09:或者,您可以使用預訂表中的一個字段將預訂標記爲「掛起」。這樣你就不必創建兩張具有幾乎相同信息的表格。 –
有幾種方法可以解決這個問題。
馬丁爵士謝謝你的回答。我會查找如何鎖定數據庫 – KiiroSora09
我不是一位先生,但是要感謝禮貌;-) –
我喜歡對比我有更多知識的人表示尊重。特別是當他們試圖提供幫助時。 *我很佩服程序員:D – KiiroSora09
使用「臨時」系統,標誌着作爲預訂的臨時寫成提到的,說10分鐘。這些插槽隨後對後續請求不可用。如果預訂未在時限內完成,則該插槽將再次釋放。如果您在預訂時間段之前獲取所有客戶詳細信息,則退出率應保持較低水平。
您必須將時間框架和它的「臨時狀態」傳達給預訂者。如果你有後來的階段,訪客可以停下來,然後一個簡單的JS定時器倒計時的時間將有所幫助,並推動整個過程中的預訂。
或者,允許重複預訂,直到最後一個「付款」按鈕首先被按下時爲止。第二種方法會轉換得更好,第一種方法更「正確」。
爲什麼downvotes?我認爲這是一個有效的問題。 –
在屏幕底部發出警告,表示預訂不是最終的,直到確認爲止,然後向任何用戶稍微緩慢地發出錯誤消息 - 他們並不真正在_exactly_同時點擊「確認」,所以一個或其他請求將首先進入並更新您的數據庫,而另一個請求應導致適當的錯誤消息。 – nnnnnn
@nnnnnn:...直到意外發生和兩個請求* do *同時運行(在兩個單獨的線程中)。像這樣的事情需要鎖定或交易是可靠的。 –