LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

淺談用SQL實現工作流的并發控制

admin
2011年3月3日 16:37 本文熱度 3268
  論文關鍵詞:工作流 并發控制 SQL 數據約束 任務約束
  論文摘要:工作流技術在信息系統的應用中,并發控制機制的設計是經常要面臨的問題。給出一種基于將工作流中數據和任務分離的工作流并發控制機制,在保證工作流正確性的前提下,引入“數據約束”和“任務約束”的概念來提高工作流的工作性能和降低工作流設計的復雜性,并用數據庫中sQL語言強有力的約束控制加以實現。
  1引言
  工作流是針對工作中具有固定程序的常規活動而提出的一個概念。通過將工作活動分解成定義良好的任務、角色、規則和過程來進行執行和監控,達到提高生產組織水平和工作效率的目的。一個工作流包括一組活動及它們的相互順序關系,還包括過程及活動的啟動和終止條件,以及對每個活動的描述川。工作流模型建立的目的是為了實現業務過程自動化和用計算機來執行,這就要求工作流模型不僅能夠描述活動及其他們之間的相互連接關系,而且需要定義其他許多的信息,如組織、數據、資源等,同時對工作流模型的準確性有很高的要求。
  目前的工作流業務系統對系統運行過程中出現的并發訪問和異常錯誤的解決還存在一定的缺陷。工作流實例在運行過程中,有可能出現多個活動同時訪問共享資源的情況,多個活動在數據操作上會相互重疊。為了保證系統能夠正常運行,必須進行并發控制(ConcurreneyControl),防止出現“臟數據”,等現象。
  在本文中,我們將主要討論如何用SQL來實現工作流的并發控制,防止出現“臟數據”等現象。解決這個問題的核心是如何讓這些獨立的活動能夠擁有自己獨立的數據,而在某個活動需要訪問共享資源而又正被其他活動所擁有時,讓其等待。并發控制的實現必須有兩個最基本的條件限制:①每個活動擁有共享資源的時間應該最短;②每個活動應該擁有盡可能少的共享資源[4l。同時,我們在尋找解決方法時還應考慮以下兩個方面:①不能過多地增加工作流設計的難度;②盡可能地利用現有數據庫系統所提供的服務功能來實現。
  為了達到以上的要求,我們引入類似傳統“鎖”機制的“約束”機制來實現。這里的“約束”是一種臨時的、強加在數據項(數據約束)或者任務狀態信息(任務約束)上的一致性限制。數據約束主要控制數據項的修改,而任務約束主要控制任務中各個活動間的執行順序,因而工作流中各活動間的相互關系可以通過控制對數據庫的訪問和限制各個活動的執行順序來體現,而這兩者的限制均能通過數據庫管理系統(DBMs)中的SQL查詢語言來實現。
  2一個工作流實例
  工作流根據所實現的業務過程可以分為管理型工作流(AdillinistrativeW rkflow)、設定型工作流(AdhoeWOrkflow)、協作型工作流(CollaborativeW6rkflow)和生產型工作流(ProduetionWbrkflow)!,,。在本文中,我們所討論的工作流是基于生產型工作流,它應用在一個大規模、復雜和異構的環境下,包括一個周期重復的、可預測的復雜過程,同時,它還要接受和處理來自各個層次和各個方面的數據。下面我們簡單介紹一下這一工作流的情況。
  在圖1中所示的工作流是基于一個供電系統內部的物資領料過程。當一份領料單到來時,這一工作流開始啟動。領料開票人將領料單中信息輸入電子表格同時產生一條新的紀錄,接著兩個并行任務將被執行:庫存檢查—檢查庫中物資種類和數量是否能夠滿足需要;計劃審批驗證—驗證該張領料單是否經過相關部門審批。如果上述兩個驗證均能通過,則確認領料、產生銷售清單、結賬,最后從倉庫中發料。其中每個任務都要涉及到對數據庫的讀和寫操作。
  
  3工作流分解—數據和任務的分離
  在圖1中所提到的領料工作流中,有兩種典型的情況必須加以說明:①在物資管理系統中經常出現多個工作流同時啟動,因而開票員將信息輸入電子表格的同時必須為每條紀錄提供一個唯一且沒有沖突的領料編號,但是在這個任務沒有結束前,開票員可能會取消操作或者出現其他異常情況,導致工作流沒法正常結束。為了保證其領料編號的唯一且不沖突只能采用串行化操作;②假定一領料單己經執行庫存檢查和計劃審批驗證兩個任務,而且己經完成結賬,但是單子中的物資還沒有從庫中領走,而此時有另一單子也要求領與上一單子相同的物資,但是庫中的物資數量只能滿足一張單子的要求,如何解決他們兩者之間的沖突,從而不至于違反數據庫的一致性約束,又不得不要求工作流只能采用串行化操作。
  如果不能有效地解決以上的問題,那這一工作流的系統性能將大打折扣,而且根本沒法滿足現代業務管理系統的要求。典型的解決方法有ATM(AdvancedTransaetionModel)方法、TransaetionalTaskInte腳tion、語義鎖(SemantieLoeking)和沖突說明(ConflietSPeeifieation),但是工作流的形式過于多種多樣,單一的一種解決方法沒法滿足具體的某一工作流的需要,因而我們在項目開發的實際過程中采用了一種基于將數據和任務分開的方法,類似于操作系統中進程主體與系統資源分開,而進程主體應獲得其最小資源的思想。它綜合考慮了以下3個因素:①工作流執行的正確性;②工作流的系統性能;③一工作流模型建立和管理的復雜度。
  我們分析前面兩種需要串行化操作才能完成的情況,整個過程基本上都是通過不停地訪問數據庫來實現的,其中最主要的就是對數據庫的讀寫操作。我們把一組不可分割的數據庫操作視為一個原子操作,同時我們把任務或活動主體完成這一操作需要訪問的共享資源視為臨界資源。多個任務訪問和擁有這些資源必須滿足“空閑占有,忙則等待”的原則。
  為了將數據和任務分開,同時能保證數據庫中數據的正確性、有效性和一致性,并且能滿足數據庫中自定義的各種完整性約束規則,我們引入了“數據約束”和“任務約束”。我們的思想是運用類似于典型的并發控制中的“鎖”約束來實現數據庫的完整性和一致性約束,但是它又不同于“鎖”約束。我們引入的“數據約束”和“任務約束”是一個短時間的約束控制,他們隨著工作流實例的啟動而創建,隨著工作流的結束而撤銷。另一方面,“數據約束”隨工作流或者任務實例的輸入參數的不同而不同,不同的實例將建立不同的“數據約束”和“任務約束”。“數據約束”主要是為了保證正確的數據輸入能夠得到正確的數據輸出,同時實現數據庫中的各種靜態約束、動態約束和自定義約束,而“任務約束”是為了保證工作流中各個任務能夠按照他們之間的相互關系、前后順序正確地執行。在上述工作流中,我們將實現某一活動執行的正確性和控制多個活動間的執行順序作為兩個目標來分開處理。譬如在庫存檢查中,“數據約束”是為了保證滿足庫中的物資數量不能低于最低數量的限制,而“任務約束”是為了保證領料單只有在執行完庫存檢查和計劃審批驗證后才能執行領料操作。
  “數據約束”和“任務約束”都在工作流模型設計說明中指定。一個工作流實例通過設定約束和撤銷約束來合理調度并發事務,避免并發事務之間的互相干擾造成數據的不一致性,從而提高系統的性能。
  4并發控制的實現
  4.1數據約束的實現
  SQL查詢語言作為數據庫管理系統中的一個重要組成部分,它提供了極其強大的約束限制實現功能,其中包括關鍵值約束、域約束、實體完整性約束和參照完整性約束以及各種用戶自定義的約束。數據庫中的存儲過程是經預編譯和優化后的SQL語句和流程控制語句的集合。利用它以下的幾個特點可以用來實現復雜的業務邏輯:①接受輸入的參數后返回結果給調用的過程;②可以調用其他的過程;③可以返回一個狀態字,指出調用的成果與失敗;④比一般的SQL程序運行速度更快、更簡單,使得存儲過程更快、更可行。
  觸發器是一種特殊的存儲過程,只要表格的數據改變,它會在任何時刻自動調用。其作用體現在以下3個方面:①觸發器可以不允許違反參考完整性的操作,這樣可取消企圖修改數據的事務;②觸發器可以執行比用CHECK定義復雜的約束;③觸發器可發現數據改變前后的不同,然后基于這個不同進行動作。正是因為存儲過程和觸發器能夠提供這么強大的功能,我們在實現“數據約束”和“任務約束”的過程中使用了比較多的存儲過程和觸發器。現在我們考慮解決圖l中兩張領料單領用相同物資的問題。
  在圖2中當領料單輸入時開始整個任務過程,根據領料單中的信息建立相關的約束,保證下面活動能夠進行串行化操作,接著檢查種類和數量,確認能夠滿足需要時從倉庫里發料,減掉相應的數量,最后撤銷約束,允許其他任務繼續執行。圖2中設定領料約束的實現如下:
  
  CREAT JEPROCEDURESetReeeiveCheck
  @P一ReeeiveNumberChar(10),
  @P一MaterialNumberChar(10)
  AS
  Begin
  Deelare
  @P一Amountint
  Seleet@p一Amount=Count(*)
  FrornAetiveReee計e WhereMateria Numbe二@P一Materia1Number
  ff@P一Alnotlnt==0
  Begin
  InsertIntoAetiveReeeive
  Values(@P一ReeeiveNumber,@P一MaterialNumber
  Efid
  Else
  Return(l)
  End

  存儲過程一開始,在表l中查找是否存在@P一MaterialNumber所對應的領料單編號,如果對應的某一領料單編號己經在表中存在,則存儲過程返回1—表示該領料單中的這一物資已經被另一領料單鎖定,此次鎖定操作失敗。如果表中還沒有存在所對應的領料單編號,則向表中插入一紀錄,表示該物資將被這一領料單鎖定。一張領料單中可能存在多種物資,當所有物資均能被鎖定時,整個領料約束完成,可以進入下一步。如果在設定過程中有一物資不能被鎖定,則解除對所有領料物資的鎖定,這一領料單必須等待。當然在整個并發控制過程中我們也同時引入了任務調度機制,從而保證每個任務都能順利完成。
  
  撤銷約束的實現如下:
  CRE戶L1,EPROCEDUREUnsetReeeiveCheek
  @P一ReeeiveNumberChar(lo)
  AS
  Begin
  DelCteFromAetiveReeeive
  WllereReceiv Number @P一ReceiveNumber
  End
  設定約束和撤銷約束保證了這一任務能夠正確地執行,而檢查種類和數量這一過程執行的時間很短,它的串行化操作對系統的性能影響不大,從而能提高整個工作流的性能。
  4.2任務約束的實現
  “任務約束”是為了保證整個工作流中各個任務的正確執行,它依照工作流中各個任務之間存在的任務關聯來設定,而任務關聯是根據工作流面向的相關物理模型來抽取的。
  在圖3中我們抽取了一個典型的工作流模型,它描述了各個任務之間的前趨關系。任務TZ、T3必須在任務Tl完成的前提下才能執行,而T4、TS只能在T3完成的前提下才能執行,最后任務T6在TZ、T4、TS全部完成的情況下才能啟動。為了保證上述任務能夠正確地按序執行,我們在每個任務啟動前加上一定的約束條件,只有當這些條件滿足時任務才能執行,而在條件未滿足前必須等待。這些約束包括靜態約束和動態約束。靜態約束是在工作流設計階段,設計者根據各個任務間存在的關聯制定的,而動態約束則是工作流在運行時,根據任務內部數據間存在的邏輯性而動態設定和撤銷。
   
  在圖4中我們抽取了計劃單審批過程中的一個工作流模型,對于一計劃單,由于它所屬計劃的類別和其他一些特殊因素,對不同的計劃單可能會采取不同的審批流程,因而我們采取動態約束來實現對它的任務約束。不管靜態約束還是動態約束,它們均能通過存儲過程和觸發器來實現。其具體的實現過程類似上節所述數據約束的實現。
  5結束語
  工作流的并發控制主要應該考慮3個方面的因素:①正確性:并發執行的任務之間不能互相干擾:②性能:并發執行的各個任務應占用最少的系統資源;③復雜性:工作流的建立和管理必須簡單易行。我們正是從以上3個方面考慮,引入了“數據約束”和“任務約束”來提高工作流的性能和保證工作流的正確執行,同時利用數據庫中SQL語言強有力的約束控制實現能力,使得我們的解決方法更加簡單和高效。
  參考文獻:
  [1]范玉順,等.工作流管理技術基礎LM].北京:清華大學出版社,2001.
  [2]BernsteinPHadZilaeosGoodmanVConeurreneyControlandReeoinDatabaseSystems[M].Addison一slev,On-tario,Canada,1987.
  [3]JuhaPuustjarvi.WOrkflowConeurreneyContr01[J].TheComPuterJournal,2001,44(l).
  [4]AViSilbersehatPeterBaerGalvinGregGagne.OPeratingsystemConeePtSixthEditiontMI.Johnwil&Sons,2001.
  [5]BobakAR.DistributedandMulli一databaseSystems[M]J.teehHouse,199622.

該文章在 2011/3/3 16:37:32 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業的專業生產管理軟件系統,系統成熟度和易用性得到了國內大量中小企業的青睞。
點晴PMS碼頭管理系統主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業務管理,結合碼頭的業務特點,圍繞調度、堆場作業而開發的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業的高效ERP管理信息系統。
點晴WMS倉儲管理系統提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統,標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協同辦公管理系統。
Copyright 2010-2025 ClickSun All Rights Reserved

黄频国产免费高清视频,久久不卡精品中文字幕一区,激情五月天AV电影在线观看,欧美国产韩国日本一区二区
中文字幕乱在线伦视频高濑 | 亚洲五月综合一区二区 | 最新中文一区二区在线播放 | 亚洲日本va在线电影 | 制服丝袜中文字幕有码中出 | 日韩国产欧美亚洲精品一二三区 |