有一個小型系統,其中一個數據庫表作爲MSSQL 2005上的隊列。多個應用程序正在寫入此表,並且一個應用程序正在以FIFO方式讀取和處理。並行處理數據庫隊列
我必須讓它更先進一點才能創建一個分佈式系統,其中可以運行多個處理應用程序。結果應該是2-10處理應用程序應該能夠運行,並且他們不應該在工作中互相干擾。
我的想法是擴展隊列表,顯示一個進程已經在處理它。處理應用程序將首先用它的idetifyer更新表,然後詢問更新的記錄。
因此,像這樣:
start transaction
update top(10) queue set processing = 'myid' where processing is null
select * from processing where processing = 'myid'
end transaction
處理後,將表格別的東西的處理列,例如「完成」,或什麼的。
我對這種方法有三個問題。
第一:可以以這種形式工作嗎?
第二:如果它工作,它有效嗎?你有任何其他想法來創造這樣的分佈?
第三:在MSSQL中,鎖定是基於行的,但在鎖定了一定數量的行之後,鎖被擴展到整個表。所以第二個應用程序不能訪問它,直到第一個應用程序不釋放事務。爲了不鎖定整個表格,只能創建行鎖,可以選擇多大(頂部x)?
這是非常好的,正是我所需要的。謝謝。 – Biri 2008-10-30 09:12:03
不錯。我說我會感興趣;-) – philsquared 2008-10-30 09:35:29