※ 引述《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】