iT邦幫忙

0

成功新增資料到資料庫後,馬上查詢卻查不到

  • 分享至 

  • xImage
  •  

情境:程式裡面的實作,是先呼叫 domain 去資料庫新增資料,緊接著再馬上做查詢動作,但卻查不到剛才所新增的資料。

可能原因一

程式裡面有使用 TransactionScope,如果對像 db 是二個以上,那處理層級就會被提高,會由 MSDTC 來介入處理。但如果都是同一個 db 時,MSDTC 不會被 trigger,而是由 db server 自己處理 transaction。
經臨床實驗證明,如果有使用 TransactionScope,程式裡面即使已呼叫 transaction.commit,這也不代表資料會馬上落地到資料庫。
這個原因是因為 MSTDC or DB Server 有它自己處理「交易」時要做的事,所以程式就算已經 commit(呼叫方已經收到 return),這時後馬上去查詢剛才所新增的資料也不一定會馬上有。

可能原因二

資料庫有實作讀寫分離。
資料落地後要同步到 standby 也是需要時間,不管做得再快(就算只有毫秒差),都會需要一點時間。
所以這時後程式一呼叫完寫入的方法,並且就馬上進 standby db 查的話,就有可能查詢不到。

可能解法一

如果在程式的設計上沒有到非常講究,可以在呼叫新增資料的方法(或著是 procedure)內,再多回傳所需要的資料。
但為什麼會說「講究」這個字,是因為有些設計的模式,並不建議在新增的動作中,又再回傳資料。例:CQRS。

可能解法二

如果呼叫方在呼叫完後沒有得到錯誤,並且在商業邏輯的部份也預期這就算是順利新增完資料的話,可以再多實做「重試」的機制。


圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言