顧客がチケットを選択し、注文を完了するか時間がなくなるまで 3 分間 (チケット マスターのように) チケットをロックしたい発券システムを作成している場合、どうすればこれを行うことができますか? 私は、顧客がセッション/アプリケーションのクラッシュを放棄して、チケットがデータベースに永久にロックされることを避けたいと考えています。
ORM と C# に nHibernate を使用しています。
顧客がチケットを選択し、注文を完了するか時間がなくなるまで 3 分間 (チケット マスターのように) チケットをロックしたい発券システムを作成している場合、どうすればこれを行うことができますか? 私は、顧客がセッション/アプリケーションのクラッシュを放棄して、チケットがデータベースに永久にロックされることを避けたいと考えています。
ORM と C# に nHibernate を使用しています。
現在のすべての予約を保持する別のテーブルを用意するだけです。例えば:
**Reservations**
UserID
TicketID
ExpiryDate
これはセッションに依存しません。有効期限が切れたレコードを削除する必要さえありません。新しい顧客がチケットを照会したときに、有効期限が > 現在の予約テーブルに存在しないすべての利用可能な座席を見つけます。
時限イベントなどのより複雑なシステムを避け、シンプルに保ちます。
各チケットを識別できる場合は、ユーザー、注文などに関するデータ、およびもちろん、ロックの有効期限が切れる時間を保持するタイムスタンプを使用して、このチケットにロック情報を割り当てることができます。
別のユーザーがチケットを選択したい場合は、このタイムスタンプをチェックして、ロックの有効期限が切れているかどうかを確認する必要があります。
期限切れのチケット ロックを定期的に解除するチケット期限切れサービスを用意します。有効期限とチケットを記録します (おそらくセッション ID とともに)。注文は、不要になったときにこれを削除できます。または、障害が発生した場合は、自動的にロックが解除されます。