我們有一個Web服務,用於識別車輛上發生的任何故障的XML文件。 Web服務然後使用EF 3.5將這些文件加載到超規範化數據庫。通常,一個XML文件在10-20秒內被處理。有兩種併發情況需要處理:鎖定表以處理實體框架3.5中的併發性
不同車輛同時發送XML文件:這不是問題。 EF的默認樂觀併發確保了我可以將所有這些文件存儲在相同的表中,因爲它們的數據是互斥的。
相同的車輛同時發送多個文件:這會產生一個問題,因爲我的系統試圖同時向數據庫寫入相同或相似的數據。這並不罕見。
我們需要點2
爲了解決這個問題的解決方案我介紹了一個鎖表。基本上,當我開始寫入數據庫時,我插入了一個連接的車輛ID和故障時間戳(對於同一故障,由車輛發送的多個文件相同)到此表中,並且一旦我完成就刪除記錄。但是,有很多時候這兩個文件都試圖將這一行同時插入到數據庫中。在這種情況下,一個文件成功,而另一個則拋出一個重複的密鑰異常,該異常將轉到web服務的調用者。
處理這種情況的最佳方法是什麼?我不想從db中回滾任何東西,因爲有多個表涉及單個文件。
由於我們不能使用消息隊列,所以我猜如果鎖表中只有@Ladislav也提到最好的選擇。 – Yasir