請問各位前輩:
目前有個定時更新資料庫的需求,小的我測試許多方法都無法實現,懇請各位前輩給小弟指點一下,大致上的需求如下(PHP & MSSQL):
'設定凍結日期' 為UPDATE 某個TABLE的欄位。
'設定執行日期及時間' 為要執行的日期及時間。
原本執行的日期及時間只有一個,我是用PHP的ignore_user_abort(TRUE)、SLEEP函數讓他倒數秒數 ('設定執行日期及時間' 減掉 '現在時間秒數')。
但目前有多個'設定執行日期及時間',請問各位前輩該如何修改會比較好?
我將我目前的自定義排程的做法給你。
基本上,我會建立一個排程用的物件出來。
然後設定排程每分去運行一次這個排程物件。
該物件的資料規劃如下
物件的運行位置或是指定命令、cron的設定值、最後運行時間值、下一次的運行時間值。
排程會每分去檢查是否有需要運行的指令或是物件。
會依據「下一次的運行時間值」來判斷是否要執行命令。
並在執行成功完成後。依照cron的設定值換算下一次的運行時間。
並將當下的時間值儲存為最後運行時間
這樣子你就可以做到讓user能自定義時間去跑排程了。
也可以自由的選擇要用何種物件開發定義你需要的值處理。
我目前的crontab只有一個設定。就是只跑該排程的物件。
由它來處理我實際要跑的排程。
https://www.webteach.tw/?p=114
你要不要試看看用 mysql event
我的方法有二:
透過mysql procedure方式,每次使用者輸入完之後,就觸發執行。只是我不太清楚你要更新資料的複雜度
透過排程方式,紀錄多筆並執行。你可以將排程設定成10分鐘執行一次,也可以紀錄使用者異動資料去紀錄更新時間,再透過排程去判斷是否執行資料更新
leeihsing0127
1.不好意思,我不太懂procedure的用法,我google一下 這個是不是要讓他寫個迴圈,然後每幾分鐘跑一次這個迴圈,直到判斷值成立時才跳出。另外我資料庫只需要UPDATE一個欄位的日期而已。
2.排程我也想過,但是如果沒有排程內容時,排程還會一直跑除非我關閉,因為有時我每天要跑、有時一兩個禮拜要跑一次。
我剛剛看了一下你的回應,你不需要去關閉排程啊。
如果沒有人去執行凍結或執行時間,頂多這排程沒做事而已。
如果只是更新某欄位,排程跑多或跑少,並不會影響效能。
樓主可能誤解了許多邦友提的 event 事件了,
您的需求,以 event 來處理最方便了,這是由您來寫,不是叫使用者來寫。
完全不必動到 C#、CONSOLE、EXE、php
您去研究一下吧。
不管是 ignore_user_abort() 或者排程,都是為了達到「監聽某件事」這個目的,所以先撇除要用 php ignore_user_abort() 或者排程執行
目前已知條件
處理方式
其實不管怎麼樣使用者都不需要碰到程式或排程設定,你只要寫好邏輯【讓他倒數秒數 ('設定執行日期及時間' 減掉 '現在時間秒數')】就好了,不過是單筆與多筆資料的區別
如果我的回答還是不符合你的需求,那...不好意思了XD