大家好,這邊先簡單描述一下問題。
現在有 A B 兩個系統,這兩個系統都可以讀取/寫入同一個 table。
(不過 B 不是我們管理的,也無權請對方修改。)
然後有一些資料,會經由 B 系統去 query / update,
但這些資料其實是有時效性的,不能太早被讀取到。
而最近一直發生時間還沒到就會有人去 query / update,
我方這邊能做的處理就是先去 db update flag 讓 B 系統讀取不到。
但有些天才(?)總是可以在我們 update flag 之前,
就先 query / update 資料了,每次都會發現有一兩筆漏網之魚。
這事情其實有點困擾,
但我們也動不了 B 系統,所以才想說有沒有辦法從資料庫下手。
先鎖定某些特定資料直到某個時間點才 unlock 這樣。
以前沒這麼做過,也很少用 lock 功能,
所以想說先來問問前輩們有沒有這樣做的經驗。
在此先感謝願意回應的前輩,感恩 <(_ _)>
備註:其中有一些政治性的緣由,所以變成 B 去改資料結果要 A 負責,
不過不太好完整解釋經過,還請見諒。
1.有 A B 兩個系統,這兩個系統都可以讀取/寫入同一個 table。
2.我方這邊能做的處理就是先去 db update flag 讓 B 系統讀取不到。
有試過在那個 table 上 CREATE TRIGGER 來 update flag 嗎 ?
CREATE TRIGGER
先鎖定某些特定資料直到某個時間點才 unlock 這樣。
如果可以的話
原本
負責「把特定資料寫進那個 table」的程式
改成
「在某個時間點
才把特定資料寫進那個 table」
應該比較簡單
然後過段時間,另一邊來問,總是有些天才(?) 要弄 update flag來擋我們,有什麼辦法可以突破....
人協調好,比較重要.這種事情我卡你,你鑽個洞,沒完沒了,不是長久之道.之後還是要協調啦.補充了一個方法,不是很好,就起個頭.
就像
最痛的是中間那個被捶的單位
家家有本難念的經。
如果人能搞定,也不會來問了...
有一個方法,就是把原本約定好的table 改名字,例如原本叫 tbl_for_b, 改成, tbl_hide_for_b, 然後再建立一個叫做 tbl_read_for_b 的table,結構一樣,但是沒有資料.
建立一個 view , 取原本的 tbl_for_b的名字, select * from tbl_read_for_b; 實際上就是沒有資料.....
然後當你們滿意了,要放行了.再把 view,這是偽裝成table (tbl_for_b) 定義改為 select * from tbl_hide_for_b;
然後時間窗口過了,又改回 select * from tbl_read_for_b;
這就像方唐鏡跳進來跳出去一樣.
換成我就直接用 schedule event alter table name
要嘛大家都能用
要嘛大家都不能用
一視同仁
會不會是兩邊 server 時間不一致?
有沒有做網路校時 ?
crontab 的是到分鐘,會受到系統負荷影響,若要精度高一些,可以參考 systemd.timer
感謝大大們的回應,在此回覆一下~
1, 政治問題有時候真的比技術問題難處理...
2, 寫入資料的地方也不在我們這,如果可以決定寫資料的時間/內容,
那我們其實一開始改成無法讀取的 flag 就好 XD
3, 資料蠻多的,table不太方便改名字
4, 兩台都有校時,所以實在不曉得那些 update 的人,是怎麼鑽那一點點的時間空隙...
5, 我先試試看樓下大大提供的 trigger 方法,理論上可行。
再次感謝回應,謝謝~