2015-04-02 44 views
0

我想要做的是讓多個線程,進程甚至機器共享單個事務。準確地說。我想將大量工作(主要是SQL Server查詢)分享給我的多個線程,進程或機器,並且我希望工作是原子化的。我已經看過MSDTC,但是如果您想要更新幾個不同的SQL Server實例(或其他資源),並且在同一個事務下擁有所有內容,但它似乎總是源於同一個源。即一個過程(一個連接)。可能嗎?對技術沒有限制,除了SQL Server。我想要兩個階段提交,但我想從一臺機器啓動事務,並將該事務(或加入它的一種方式)提供給其他進程。從多個來源到單個SQL服務器實例的分佈式事務

問題定義 問題是我有一個很長的過程,它涉及到一些複雜的計算和數據庫更新。整個過程可以預定,並且可以並行處理大量過程。我想將該處理(包括數據庫更新)作爲獨立進程(包括遠程進程)進行處理。

回答

0

我想你想做一個大交易;像通過select語句加載一個巨大的行集;如果我的方式正確,我希望這些步驟能夠引導你到你想要的東西;)。

  1. 每個進程,線程或機器都說他們需要一個唯一的ID,如s1,s2,...,sn。
  2. [可選]每個站的容量爲全部設置站大小。
  3. 將此數據存儲在類似station的表格中。
  4. 現在用一個[動態]分頁解決方案使用從station表。
  5. 將每頁分配給一個工作站,呼叫工作站執行其頁面。

實施例:

查詢:

select * from someTables 

站:

stationId | size 
----------+---------- 
s1  | 10 
s2  | 20 
...  | ... 
----------+---------- 
      | sumSize 

(I)。您需要反覆當sumSize小於count(*)

隊列

queue_repeat_count = (select count(*) from sometables)/sumSize

當你打電話,你需要重複queue_repeat_count次站。

在每個隊列你有一個cursorstation表呼叫站的說法,這樣的:

station_Calls(queue_repeat)

你在你的服務器中的存儲過程是使用queue_repeat參數處理分頁。

這只是一個想法,我希望它能幫助你;)。

3

要嚴格回答這個問題:

加入交易然而,這幾乎可以肯定是不是你想做什麼。我建議你描述你試圖解決的實際問題,而不是詢問如何實現你認爲合適的特定解決方案。

+0

「很多事情可以並行處理」事務絕對沒有辦法可以並行執行多個語句(將會話綁定到單個事務中並沒有什麼區別)。閱讀https://msdn.microsoft.com/en-us/library/ms131686.aspx – 2015-04-02 19:00:00

+0

這不是我想要並行執行的實際SQL語句。這是SQL語句之前的處理。我看過的一件事是通過單個進程傳遞SQL語句。它們是否線性處理並不重要。 – Steve 2015-04-02 20:57:19

+0

如果你想擴大處理範圍,你爲什麼要求參與交易?在流程/會話中進行所有數據庫交互,並將工作(通過IPC)交給您的流程。順便說一句,如果處理過程非常繁重以至於無法擴展,那麼由於事務長度的限制,它不能在單個事務中完成。看起來像你真正想要的是一個工作流程。 – 2015-04-03 10:03:31