精華區beta Programming 關於我們 聯絡資訊
※ 引述《tester.bbs@bbs.csie.ncu.edu.tw (try or test)》之銘言: : > 最簡單的方法: : > 假設對於每年每一天每班次每座位當成主鍵值,在寫入資料庫時,馬上就知道了。 : > 因為重複會被踢... : > 比如說用 8 bytes 整數可以很揮霍的使用。 : > yyyyMMddNNNNSSSSL : > NNNN: 班次 : > SSSS: 座位 : > L: 英文字母編號,代表 a, b, c, d, ... : ===== : 1.這只是可以快速找到那個空位的記號處. : 2.但這個方法不能保證是 multiple read single wright . : 3.假設對單一空位能確保 MRSW 的鎖定動作, 但也無法排除 : 一堆近乎團體票形式的同車廂多空位的次次請求與退位彼 : 此反覆干擾. : 4.接近滿載時, 若無排除再進入的手段, 必然讓請求以上窮 : 碧落下黃泉的形式費時找空位, 等退位. : 5.答案顯然是有的, 只是不可 "以偏概全". 其實這種東西一定早就有寫好的了 訂票系統又不是第一次出現... 在我的想法裡, 我認定所有訂票機器都是固定的 也因此,每一台訂票機都擁有一個唯一識別碼 流程1 讀取空位, 這個動作由訂票機直接向資料庫請求完整的空位資料 在使用者確認的過程中, 訂票機以一定不影響系統效能的頻率確認空位還空著 流程2 使用者下訂單, 此時不是直接寫入資料庫, 而是向一個唯一服務程式送出空位註冊 該服務程式使用UDP+CRC Check+單執行緒確保不會有兩個請求同時到達 資料內容包含訂票機識別號碼 由於只有唯一的程式負責寫入訂位, 自然沒有重複畫位問題 流程3 訂票機自行向資料庫確認定位是否成功, 藉由確認該空位的註冊者是不是自己 流程4 若失敗, 回到流程1 若成功, 但使用者放棄付款, 則刪除空位註冊資料 若成功, 且付款成功, 則向資料庫寫入完整定位資訊 ======================= 其實高鐵總共也才(19(北上)+19(南下))*6(站間)*(923(標準)+66(商務))=225492 要紀錄所有空位資料才880KB(我相信訂票機不會超過1023台...) 這種大小連資料庫都不需要動用, 直接作成矩陣就好... -- 〒作者:SmallBee 來自:48-204.dorm.ncu.edu.tw ◎二進位的世界【140.115.50.50‧binary.csie.ncu.edu.tw】