新四季網

一種資料庫並發控制方法及裝置與流程

2023-05-31 17:34:26 1


本發明涉及資料庫
技術領域:
,特別是涉及一種資料庫並發控制方法及裝置。
背景技術:
:在現有技術中,為了保證應用程式的可用性和可靠性,同一應用程式APP可以分別部署在多個終端設備上,並且,部署在不同終端設備上的各應用程式可以共享同一資料庫。這樣,當任一終端設備出現故障時,部署在其餘終端設備上的應用程式仍可正常運行。舉例而言,如圖1所示,APP-1和APP-2可以為同一應用程式,APP-1部署在一終端設備上,APP-2部署在另一終端設備上。這樣,當APP-1所在的終端設備出現故障,導致APP-1無法正常工作時,APP-2仍可在其所在的終端設備上正常運行。但是,應用程式採用上述部署方式時存在一定的問題。如圖2所示,當一個終端設備上的APP_1接收到一個操作指令,例如對資料庫中的某一特定存儲區域內的數據c的更改操作指令時,該終端設備會先與資料庫建立連接。在連接建立好之後,該終端設備會從資料庫中查詢得到數據c,並計算出c經更改後所對應的欄位值v。最後,資料庫伺服器中的特定存儲區域內的數據c將會被更改為欄位值v。一般而言,終端設備從資料庫中查詢得到的數據需要是資料庫中當前最新的數據,故理論上來說,需要在上述特定存儲區域內的數據c被成功更改為欄位值v後,另一終端設備再去特定存儲區域內獲取數據。但是,在實際情況中,在特定存儲區域內的數據c還未被更改為欄位值v的情況下,另一終端設備上的APP_2可能也會接收到相同的操作指令,此時另一終端設備也會去上述特定存儲區域內獲取數據,另一終端設備獲取到的就不是最新的數據,各個終端設備對資料庫的業務操作之間會產生並發衝突,這樣會導致業務操作出現錯誤。因此,如何避免在針對資料庫的同一業務操作並發的情況下,出現並發衝突的問題是一個亟待解決的問題。技術實現要素:本發明實施例的目的在於提供一種資料庫並發控制方法及裝置,以避免在針對資料庫的同一業務操作並發的情況下,出現並發衝突的問題。本發明實施例提供了一種資料庫並發控制方法,應用於資料庫伺服器,所述方法包括:接收終端設備發送的攜帶有第一標識信息的第一指令,其中,所述第一指令為所述終端設備獲得針對所述資料庫伺服器中的資料庫的操作指令後發送的,所述第一標識信息為所述操作指令中所包括的第一業務操作的標識信息;在資料庫伺服器的業務操作表中的第一標識信息所對應的狀態為加鎖狀態的情況下,生成用於表徵所述第一業務操作當前正在被執行的第一數據,其中,所述業務操作表中存儲有至少一個標識信息及每個標識信息所對應的狀態,所述狀態包括加鎖狀態和未加鎖狀態;向所述終端設備發送所述第一數據,以使所述終端設備在接收到所述第一數據後,不執行所述第一業務操作。本發明實施例還提供了一種資料庫並發控制裝置,應用於資料庫伺服器,所述裝置包括:指令接收模塊,用於接收終端設備發送的攜帶有第一標識信息的第一指令,其中,所述第一指令為所述終端設備獲得針對所述資料庫伺服器中的資料庫的操作指令後發送的,所述第一標識信息為所述操作指令中所包括的第一業務操作的標識信息;第一處理模塊,用於在資料庫伺服器的業務操作表中的第一標識信息所對應的狀態為加鎖狀態的情況下,生成用於表徵所述第一業務操作當前正在被執行的第一數據,其中,所述業務操作表中存儲有至少一個標識信息及每個標識信息所對應的狀態,所述狀態包括加鎖狀態和未加鎖狀態;第一發送模塊,用於向所述終端設備發送所述第一數據,以使所述終端設備在接收到所述第一數據後,不執行所述第一業務操作。本發明實施例中,當終端設備獲得針對資料庫的操作指令後,終端設備不會立即執行操作指令所指示的第一業務操作,而是先向資料庫伺服器發送第一指令,以使資料庫伺服器執行相應的查詢操作以及數據生成操作。最終,若終端設備接收到的為表徵第一業務操作當前正在被執行的第一數據,終端設備就不會執行第一業務操作。與現有技術相比,本發明實施例較好地避免了在針對資料庫的同一業務操作並發的情況下,出現並發衝突的問題。附圖說明為了更清楚地說明本發明實施例或現有技術中的技術方案,下面將對實施例或現有技術描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發明的一些實施例,對於本領域普通技術人員來講,在不付出創造性勞動的前提下,還可以根據這些附圖獲得其他的附圖。圖1為應用程式的部署示意圖;圖2為應用程式與資料庫的交互流程示意圖;圖3為本發明實施例提供的資料庫並發控制方法的流程圖;圖4為本發明實施例提供的資料庫並發控制裝置的結構框圖。具體實施方式下面將結合本發明實施例中的附圖,對本發明實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發明一部分實施例,而不是全部的實施例。基於本發明中的實施例,本領域普通技術人員在沒有做出創造性勞動前提下所獲得的所有其他實施例,都屬於本發明保護的範圍。為了解決現有技術存在的問題,本發明實施例提供了一種資料庫並發控制方法及裝置。下面首先對本發明實施例所提供的一種資料庫並發控制方法進行說明。參見圖3,圖中示出了本發明實施例所提供的一種資料庫並發控制方法的流程圖。如圖3所示,該方法可以應用於資料庫伺服器,該方法可以包括如下步驟:S301,接收終端設備發送的攜帶有第一標識信息的第一指令,其中,第一指令為終端設備獲得針對資料庫伺服器中的資料庫的操作指令後發送的,第一標識信息為操作指令中所包括的第一業務操作的標識信息。需要說明的是,該資料庫可以為MySQL資料庫、SQLServer資料庫或者Oracle資料庫,當然,資料庫的類型並不局限於此,具體可以根據實際情況來確定,本實施例對此不做任何限定。本領域技術人員容易理解的是,MySQL是一個開放原始碼的關係型資料庫管理系統,MySQL由於性能高、成本低、可靠性好等優點,成為了最流行的開源資料庫,其被廣泛地應用在Internet上的中小型網站中。隨著MySQL的不斷成熟,其也逐漸被用於更多大規模網站和應用,例如維基百科、Google和Facebook等網站。本實施例中,由於操作指令中包括第一業務操作的標識信息,因此,終端設備在獲得該操作指令後,其根據該標識信息可以非常容易地確定出用戶希望針對資料庫執行的具體是何種類型的操作。為了避免出現並發衝突的情況,在獲得操作指令後,終端設備不會立即執行操作指令所指示的第一業務操作,而是先執行後續的S302。S302,在資料庫伺服器的業務操作表中的第一標識信息所對應的狀態為加鎖狀態的情況下,生成用於表徵第一業務操作當前正在被執行的第一數據,其中,業務操作表中存儲有至少一個標識信息及每個標識信息所對應的狀態,該狀態包括加鎖狀態和未加鎖狀態。需要說明的是,資料庫伺服器可以預先對標識信息所對應的狀態以及標識信息所指向的業務操作當前是否正在被執行之間的映射關係進行定義。具體地,對於資料庫伺服器而言,其可以將任一標識信息所對應的狀態為加鎖狀態定義為:該標識信息所指向的業務操作當前正在被執行,其還可以將任一標識信息所對應的狀態為未加鎖狀態定義為:該標識信息所指向的業務操作當前未被執行。可以理解的是,業務操作表中可以存儲有針對資料庫伺服器的每個業務操作的標識信息,以及每個標識信息所對應的狀態;或者,業務操作表中也可以僅存儲有資料庫伺服器在接收到攜帶有第一標識信息的第一指令之前,其接收到的各第一指令中的標識信息,以及每個標識信息所對應的狀態,這都是可行的。下述實施例均以業務操作表中存儲的內容為資料庫伺服器在接收到攜帶有第一標識信息的第一指令之前,其接收到的各第一指令中的標識信息,以及每個標識信息所對應的狀態的情況為例進行說明。本實施例中,當資料庫伺服器接收到攜帶有第一標識信息的第一指令後,資料庫伺服器可以去業務操作表中查詢第一標識信息是否存在,並在業務操作表中存在第一標識信息的情況下,查詢第一標識信息所對應的狀態是否為加鎖狀態。若第一標識信息所對應的狀態為加鎖狀態,則說明第一標識信息所指向的業務操作當前正在被執行,此時資料庫伺服器會生成用於表徵第一業務操作當前正在被執行的第一數據。S303,向終端設備發送第一數據,以使終端設備在接收到第一數據後,不執行第一業務操作。由於第一數據是用來表徵第一業務操作當前正在被執行的數據,因此,當終端設備接收到該第一數據後,終端設備可以非常容易地確定出第一數據當前正在被執行,為了避免出現並發衝突的情況,終端設備將不會執行第一業務操作。本實施例中,當終端設備獲得針對資料庫的操作指令後,終端設備不會立即執行操作指令所指示的第一業務操作,而是先向資料庫伺服器發送第一指令,以使資料庫伺服器執行相應的查詢操作以及數據生成操作。最終,若終端設備接收到的為表徵第一業務操作當前正在被執行的第一數據,終端設備就不會執行第一業務操作。與現有技術相比,本實施例較好地避免了在針對資料庫的同一業務操作並發的情況下,出現並發衝突的問題。可選地,接收終端設備發送的攜帶有第一標識信息的第一指令後,該方法還可以包括:在資料庫伺服器的業務操作表中不存在第一標識信息的情況下,將第一標識信息更新至業務操作表中,將第一標識信息所對應的狀態置為加鎖狀態,並生成用於表徵第一業務操作當前未被執行的第二數據;向終端設備發送第二數據,以使終端設備在接收到第二數據後,執行第一業務操作。本實施例中,當資料庫伺服器接收到攜帶有第一標識信息的第一指令後,資料庫伺服器可以去業務操作表中查詢第一標識信息是否存在,並在業務操作表中存在第一標識信息的情況下,查詢第一標識信息所對應的狀態是否為加鎖狀態。可以理解的是,若資料庫伺服器的業務操作表中不存在第一標識信息,則說明資料庫伺服器之前從未接收到過攜帶有第一標識信息的操作指令,相應地,對於資料庫伺服器來說,第一標識信息所指向的第一業務操作也從未被任何操作對象(例如某一終端設備中的某個線程)執行過。換句話說,當前不可能有任何操作對象在執行第一業務操作,終端設備此時執行第一業務操作並不會導致出現並發衝突的情況。因此,在接收到第二數據後,終端設備就會去執行第一業務操作,以較好地響應用戶的操作指令,從而給用戶帶來較好的使用體驗。可選地,接收終端設備發送的攜帶有第一標識信息的第一指令後,該方法還可以包括:在資料庫伺服器的業務操作表中的第一標識信息所對應的狀態為未加鎖狀態的情況下,將第一標識信息所對應的狀態置為加鎖狀態,並生成用於表徵第一業務操作當前未被執行的第三數據;向終端設備發送第三數據,以使終端設備在接收到第三數據後,執行第一業務操作。本實施例中,當資料庫伺服器接收到攜帶有第一標識信息的第一指令後,資料庫伺服器可以去業務操作表中查詢第一標識信息是否存在,並在業務操作表中存在第一標識信息的情況下,查詢第一標識信息所對應的狀態是否為加鎖狀態。可以理解的是,若資料庫伺服器的業務操作表中的第一標識信息所對應的狀態為未加鎖狀態,則說明資料庫伺服器之前接收到過攜帶有第一標識信息的第一指令,並且,第一標識信息所指向的第一業務操作當前並未被執行。換句話說,當前沒有任何操作對象正在執行第一業務操作,終端設備此時執行第一業務操作不會導致出現並發衝突的情況。因此,在接收到第三數據後,終端設備就會去執行第一業務操作,以較好地響應用戶的操作指令,從而給用戶帶來較好的使用體驗。可選地,在資料庫伺服器的業務操作表中的第一標識信息所對應的狀態為加鎖狀態的情況下,生成用於表徵第一業務操作當前正在被執行的第一數據,可以包括:在資料庫伺服器的業務操作表中的第一標識信息所對應的狀態為加鎖狀態,且加鎖時長不大於預設的時長閾值的情況下,生成用於表徵第一業務操作當前正在被執行的第一數據。本實施例中,時長閾值可以為各個針對資料庫的業務操作理論上所需的各個時長中的最大值。可以理解的是,若資料庫伺服器查詢出第一標識信息所對應的狀態為加鎖狀態,且加鎖時長(可以認為是目標操作對象開始執行第一業務操作的時刻到當前時刻的時長,其中,目標操作對象是當前正在執行第一業務操作的對象)不大於預設的時長閾值,則可以認為目標操作對象仍在執行第一業務操作。為了避免產生並發衝突的問題,資料庫伺服器就可以生成用於表徵第一業務操作當前正在被執行的第一數據,並將該第一數據發送至終端設備,以使得終端設備在接收到該數據後,不執行第一業務操作。可以看出,本實施例較好地避免了針對資料庫的同一業務操作並發的情況下,出現並發衝突的問題。可選地,接收終端設備發送的攜帶有第一標識信息的第一指令後,該方法還可以包括:在查詢出資料庫伺服器的業務操作表中的第一標識信息為加鎖狀態,且加鎖時長不小於時長閾值的情況下,生成用於表徵第一業務操作當前未被執行的第三數據;向終端設備發送第三數據,以使終端設備在接收到第三數據後,執行第一業務操作。可以理解的是,若資料庫伺服器查詢出第一標識信息所對應的狀態為加鎖狀態,且加鎖時長大於預設的時長閾值,由於時長閾值為各個針對資料庫的業務操作理論上所需的各個時長中的最大值,此時可以確定第一業務操作當前並未被任何操作對象執行,因此,資料庫伺服器可以生成用於表徵第一業務操作當前未被執行的第三數據,並將該第三數據發送至終端設備,以使得終端設備在接收到該數據後,執行第一業務操作,以較好地響應用戶的操作指令,從而給用戶帶來較好的使用體驗。可選地,該方法還可以包括:接收終端設備在執行完第一業務操作後,發送的退出執行第一業務操作的反饋信息;根據反饋信息,將業務操作表中,第一標識信息所對應的狀態置為未加鎖狀態。對於終端設備來說,當前執行完了針對資料庫的第一業務操作後,若其未向終端設備發送退出執行第一業務操作的反饋信息,則業務操作表中,第一標識信息所對應的狀態將會一直處於加鎖狀態。相應地,當該終端設備再次接收到用戶輸入的包括有第一標識信息的操作指令或者其他的終端設備接收到用戶輸入的包括有第一標識信息的操作指令後,這些終端設備在確定出第一標識信息所對應的狀態為加鎖狀態後,還要去進一步確定加鎖時長是否大於預設的時長閾值,以根據判斷結果生成相應的數據,操作起來非常麻煩。為了解決上述問題,當終端設備執行完了第一業務操作之後,其可以向資料庫伺服器發送退出執行的反饋信息,以使資料庫伺服器將業務操作表中,第一業務操作所對應的第一標識信息的狀態置為未加鎖狀態。這樣,當該終端設備再次接收到用戶輸入的包括有第一標識信息的操作指令或者其他的終端設備接收到用戶輸入的包括有第一標識信息的操作指令後,資料庫伺服器經過查詢會發現第一標識信息所對應的狀態為未加鎖狀態,此時資料庫伺服器就可以直接生成用於表徵第一業務操作當前未被執行的第三數據,而無需執行判斷加鎖時長是否大於預設的時長閾值的步驟。容易看出,本實施例可以有效地減少資料庫伺服器所需執行的判斷步驟,以節省資料庫伺服器的系統資源。可選地,第一指令中包括終端設備中的第一線程的標識信息;反饋信息中包括第二線程的標識信息,根據反饋信息,將業務操作表中,第一標識信息所對應的狀態置為未加鎖狀態,可以包括:在第一線程的標識信息和第二線程的標識信息相同的情況下,根據反饋信息,將業務操作表中,第一標識信息所對應的狀態置為未加鎖狀態。本領域技術人員容易理解的是,第一指令中包括終端設備中的第一線程的標識信息,表明實際想要執行第一業務操作的操作對象為終端設備中的第一線程,此時可以認為第一線程想要對業務操作表中的第一標識信息進行加鎖。反饋信息中包括第二線程的標識信息,這表明想要將第一標識信息所對應的狀態由加鎖狀態更改為未加鎖狀態的為第二線程,此時可以認為第二線程想要對業務操作表中的第一標識信息進行解鎖。若第一線程和第二線程相同,則表明對第一標識信息加鎖和解鎖的操作對象為同一個操作對象,該操作對象在執行完了第一業務操作之後,正常地向資料庫伺服器發送了退出執行第一業務操作的反饋信息。若第一線程和第二線程不相同,則表明對第一標識信息加鎖和解鎖的操作對象並不是同一個操作對象,此時第一線程可能並未結束執行第一業務操作。若終端設備此時將業務操作表中的第一標識信息的狀態置為未加鎖狀態,則當另外一個線程(可能與第一線程位於同一終端設備上,或者與第一線程位於不同的終端設備上)接收到同一操作指令後,另外一個線程就會去執行第一業務操作,此時就可能會導致出現並發衝突的情況。為了避免出現並發衝突的情況,資料庫伺服器在接收到反饋信息後,其會去判斷兩個線程的標識信息是否相同,只有在兩者相同的情況下,其才會將第一標識信息所對應的狀態由加鎖狀態重置為未加鎖狀態。容易看出,本實施例進一步避免了針對資料庫的同一業務操作並發的情況下,出現並發衝突的問題。需要說明的是,本實施例中,終端設備在接收到用於表徵第一業務操作當前正在被執行的第一數據後,其可以等待預定的時間間隔後,再次向資料庫伺服器發送攜帶有第一標識信息的第一指令,此時會存在兩種情況。一種情況下,終端設備接收到的不是第一數據了,這表明之前的操作對象已經執行完了第一業務操作,並通過其所在的終端設備向資料庫伺服器發送了退出執行的反饋信息,從而使資料庫伺服器將第一標識信息所對應的狀態由加鎖狀態重置為了未加鎖狀態。此時終端設備就會執行操作指令所指示的第一業務操作,以響應用戶的操作指令。另一種情況下,終端設備接收到的仍然是第一數據,這表明之前的操作對象仍然在執行第一業務操作,其未向資料庫伺服器發送退出執行的反饋信息。因此,終端設備會繼續等待,當再次經過預定的時間間隔後,其可以再次執行向資料庫伺服器發送攜帶有第一標識信息的第一指令的步驟,直至其獲得不是第一數據為止。需要說明的是,預定的時間間隔的具體取值可以根據實際情況來確定,本實施例對此不做任何限定。可以看出,本實施例可以保證終端設備能夠較好地響應用戶的操作指令。可選地,時長閾值可以是時間間隔的N倍,其中,N為大於1的整數。需要說明的是,N的具體取值可以根據實際情況來確定,本實施例對此不做任何限定。假設時間間隔是10S,時長閾值是30S。當終端設備第一次向資料庫伺服器發送第一指令後,若終端設備獲得的是第一數據,則在間隔10S之後,終端設備就會第二次向資料庫伺服器發送第一指令;若終端設備獲得的仍是第一數據,在間隔10S之後,終端設備就會第三次向資料庫伺服器發送第一指令。一般來說,在終端設備等待的過程中,若沒有其他的操作對象向資料庫伺服器發送攜帶有相同標識信息的第一指令,那麼最多在發出三次第一指令後,終端設備一定能獲得用於表徵第一業務操作當前並未被執行的第一數據。可以看出,通過對時長閾值和時間間隔的商值的合理設置,可以有效地較少終端設備發送第一指令的次數。上述實施例中,終端設備在向資料庫伺服器發送攜帶有第一標識信息的第一指令前,其可以先判斷第一業務操作是否為用於更改資料庫的操作;若為是,再執行向資料庫伺服器發送攜帶有第一標識信息的第一指令的步驟。需要強調的是,若經判斷第一業務操作為不會對資料庫造成更改的操作,例如讀操作,那麼第一業務操作的執行並不會導致出現並發衝突的情況,因此,終端設備可以直接執行第一業務操作,而無需去確定第一業務操作是否正在被執行。若經判斷第一業務操作為會對資料庫造成更改的操作,例如寫操作,那麼第一業務操作的執行很可能就會導致出現並發衝突的情況,因此,終端設備需要先去判斷第一業務操作當前是否正在被執行,並在判斷結果為是的情況下,不執行第一業務操作。可以看出,本實施例中,終端設備可以在第一業務操作不是更改資料庫的操作的情況下,直接執行第一業務操作,故本實施例可以較為迅速地響應用戶的操作指令,從而給用戶帶來較佳的使用體驗。上述實施例中,終端設備在獲得針對資料庫伺服器中的資料庫的操作指令後,其可以向資料庫伺服器發送第二指令,以使資料庫伺服器檢測其與終端設備的連接是否存在異常。需要說明的是,資料庫伺服器可以採用現有技術中常用的、用來檢測兩個設備之間的連接是否存在異常的方法,以檢測其自身與終端設備的連接是否存在異常,具體檢測過程在此不再贅述。在檢測完成之後,資料庫伺服器可以向終端設備發送用於表徵兩者的連接是否存在異常的第四數據。終端設備根據接收到的第四數據,就可以判斷該連接是否存在異常。若經判斷兩者之間的連接存在異常,後續的步驟可能無法正常地執行,因此,終端設備會輸出報警信息,以提示用戶兩者之間的連接存在異常。具體地,終端設備輸出報警信息的實現形式多樣,例如聲音報警、文字報警等,這都是可行的,在此不再一一列舉。這樣,當用戶接收到該報警信息後,用戶可以對兩者之間的連接進行檢查、修復等,以使終端設備與資料庫伺服器之間重新建立良好的連接。若經判斷兩者之間的連接不存在異常,即說明資料庫伺服器與終端設備之間可以進行正常的信息交互,此時終端設備直接向資料庫伺服器發送第一指令即可。可以看出,本實施例可以有效地保證終端設備和資料庫伺服器之間能夠進行正常的信息交互。下面以一個具體的例子對本發明實施例所提供的一種資料庫並發控制方法的具體實施過程進行詳細的說明。假設資料庫為MySQL資料庫,並且,該資料庫內存儲有一張邏輯鎖表(可以認為是上述的業務操作表),該邏輯鎖表內的主要欄位可以參照表1。表1其中,該邏輯鎖表中可以包括約束條件1、約束條件2、約束條件3、…、約束條件N等,這些約束條件可以認為是資料庫伺服器已接收到的所有第一指令中所包含的標識信息,其用來對各種針對資料庫的業務操作進行標識。需要說明的是,約束條件可以僅有一個,只需要保證其能夠對每一業務操作進行標識即可。該邏輯鎖表中的last_call欄位用於標識某個標識信息最近一次被置為加鎖狀態的時刻。該邏輯鎖表中的unique_flag欄位用於標識某個標識信息所對應的業務操作的實際操作對象。具體地,unique_flag欄位可以為某個線程的標識信息,該標識信息的具體形式可以為:APP唯一標識和線程id,其中,APP唯一標識可以使用APP所在的物理機或虛擬機的IP位址、MAC地址或者登陸名等。該邏輯鎖表中的locked欄位用於標識某個標識信息對應的狀態,該狀態包括加鎖狀態和未加鎖狀態(即解鎖狀態),其中,locked欄位值為1對應著加鎖狀態,locked欄位值為0對應著未加鎖狀態。假設表1中的實際欄位值如表2所示。約束條件1last_callunique_flaglockedA1t1線程11A2t2線程20A3t3線程31A4t4線程41表2如表2所示,該邏輯鎖表中有四個業務操作的標識信息,分別為A1、A2、A3和A4。其中,A1最近一次被置為加鎖狀態的時刻為t1,A1所對應的locked欄位值為1,故A1對應的狀態為加鎖狀態,A1所對應的業務操作當前正在被執行,並且,當前正在執行A1所對應的業務操作的操作對象為第一線程1,此時可以認為A1所對應的業務操作的邏輯鎖被線程1所持有。A2最近一次被置為加鎖狀態的時刻為t2,A2所對應的locked欄位值為0,故A2的狀態為未加鎖狀態,即A2所對應的業務操作當前並未被執行,且最近一次執行過A2所對應的業務操作的操作對象為線程2,此時可以認為A2所對應的業務操作的邏輯鎖當前未被任何線程持有。其他標識信息的相關信息依此類推,在此不再贅述。本領域技術人員可以理解的是,MySQL資料庫中具有ONDUPLICATEKEYUPDATE語句。在MySQL資料庫中,若在INSERT語句的末尾指定了ONDUPLICATEKEYUPDATE語句,當插入行導致一個UNIQUE索引或者主鍵中出現重複值時,在出現重複值的行會執行UPDATE;否則,插入新行。一般而言,資料庫伺服器執行上述過程會出現三種情況:第一種情況下,行作為新記錄被插入,這種情況所對應的影響行數值為1;第二種情況下,原有的記錄被更新,這種情況所對應的影響行數值為2;第三種情況下,原有的記錄均未被更新,這種情況所對應的影響行數值為0。本實施例中,在對邏輯鎖表進行修改(包括修改表項或新增表項)時,資料庫伺服器可以利用該ONDUPLICATEKEYUPDATE語句,根據執行該語句後出現的情況確定邏輯鎖表所對應的影響行數值,生成所確定的影響行數值,並將生成的影響行數值作為用於表徵第一業務操作當前是否正在被執行的數據。具體地,當資料庫伺服器接收到了攜帶某一標識信息的第一指令後,若邏輯鎖表中該標識信息所對應的狀態為加鎖狀態,且加鎖時長不大於時長閾值,資料庫伺服器就可以確定該標識信息所對應的業務操作當前正在被執行,那麼資料庫伺服器對邏輯鎖表不需要做任何修改,邏輯鎖表的影響行數值為0,資料庫伺服器可以將影響行數值0作為第一數據發送至終端設備,以表徵第一業務操作當前正在被執行;若邏輯鎖表中沒有相應的標識信息,資料庫伺服器可以確定該標識信息所對應的業務操作當前並未被執行,該業務操作可以被發送第一指令的終端設備執行,那麼資料庫伺服器會向邏輯鎖表中插入該標識信息及該標識信息所對應的狀態(此時插入的狀態應為加鎖狀態),因此,邏輯鎖表的影響行數值為1,資料庫伺服器可以將影響行數值1作為第二數據發送至終端設備,以表徵第一業務操作當前並未被執行;若邏輯鎖表中該標識信息所對應的狀態為未加鎖狀態,資料庫伺服器可以確定該標識信息所對應的業務操作當前並未被執行,該業務操作可以被發送第一指令的終端設備執行,那麼資料庫伺服器會將邏輯鎖表中、該標識信息所對應的狀態修改為加鎖狀態(即原有記錄被更新),因此,邏輯鎖表的影響行數值為2,資料庫伺服器可以將影響行數值2作為第三數據發送至終端設備,以表徵第一業務操作當前並未被執行;若邏輯鎖表中該標識信息所對應的狀態為加鎖狀態,但加鎖時長大於時長閾值,資料庫伺服器可以確定該標識信息所對應的業務操作當前並未被執行,該業務操作可以被發送第一指令的終端設備執行,那麼資料庫伺服器會將邏輯鎖表中、該標識信息所對應的業務操作的實際操作對象修改為通過終端設備發送該第一指令的操作對象(即原有記錄被更新),因此,邏輯鎖表的影響行數值為2,資料庫伺服器可以將影響行數值2作為第三數據發送至終端設備,以表徵第一業務操作當前並未被執行。需要說明的是,終端設備內需要預先存儲各個影響行數值與第一業務操作是否正在被執行的對應關係,以使得終端設備在接收到影響行數值0、1或2後,能夠確定第一業務操作當前是否正在被執行。對於終端設備來說,當其獲得了攜帶有某一標識信息的操作指令後,其可以向資料庫伺服器發送第一指令,以使資料庫伺服器執行用於對表2進行處理的程序段(該程序段中具有ONDUPLICATEKEYUPDATE語句)。具體地,用於對表2進行處理的程序段可以為:假設當前線程5獲得了攜帶A1的操作指令,此時線程5就會通過其所在的終端設備向資料庫伺服器發送攜帶A1的第一指令,資料庫伺服器就會去執行上述程序段。此時,資料庫伺服器會發現A1所對應的locked欄位值為1,此時可以認為A1所對應的業務操作的邏輯鎖被持有,資料庫伺服器會去調用時間戳函數UNIX_TIMESTAMP和獲取當前系統時間的函數sysdate,以使UNIX_TIMESTAMP(sysdate)返回從UNIX紀元(格林威治時間1970年1月1日00:00:00)到當前時間的秒數。這樣,資料庫伺服器可以將調用上述函數得到的秒數與t1相減,以得到兩者之差。根據兩者之差是否大於時長閾值,後續執行過程存在著一定的差別。若兩者之差大於時長閾值,例如10s,則說明線程1已經執行完了A1所對應的業務操作,但是,線程1並未通過其所在的終端設備向資料庫伺服器退出執行的反饋信息。此時,A1所對應的業務操作的邏輯鎖將會由線程5來持有,資料庫伺服器會將表2的第一行數據中的線程1更改為線程5,並將t1更改為線程5獲得邏輯鎖的時間t5。可以看出,這種情況下,表2中的第一行數據被更新,故這種情況所對應的影響行數值為2,資料庫伺服器可以生成影響行數值2,即用於表徵A1所對應的業務操作當前並未被執行的第三數據。這樣,當資料庫伺服器將第三數據發送至線程5所在的終端設備後,線程5根據該第三數據,即影響行數值2,就會確定A1所對應的業務操作當前並未被執行,故線程5將會執行A1所對應的業務操作。當線程5執行完了A1所對應的業務操作後,線程5會通過其所在的終端設備向資料庫伺服器發送反饋信息,此時資料庫伺服器會將表2的第一行數據中的locked欄位值置為0。若兩者之差不大於時長閾值,例如10s,則說明線程1仍然在繼續執行A1所對應的業務操作。此時資料庫伺服器不會對表2進行任何更改。可以看出,這種情況下,表2並未發生任何更改,故這種情況所對應的影響行數值為0,資料庫伺服器可以生成影響行數值0,即用於表徵A1所對應的業務操作當前正在被執行的第一數據。這樣,當資料庫伺服器將該第一數據發送至線程5所在的終端設備後,線程5根據該第一數據,就會確定出A1所對應的業務操作當前正在被執行,故線程5將不會執行A1所對應的業務操作。線程5將會等待預定的時間間隔,並在預定的時間間隔後再次向資料庫伺服器發送攜帶A1的第一指令,直至其獲得的影響行數值為2為止。若當前線程6獲得了攜帶A2的操作指令,此時線程6就會通過其所在的終端設備向資料庫伺服器發送攜帶A2的第一指令,資料庫伺服器就會去執行上述程序段。此時,資料庫伺服器會發現A2所對應的locked欄位值為0,即A2所對應的業務操作的邏輯鎖未被持有,故資料庫伺服器會將表2的第二行數據中的線程2修改為線程6,並將t2更新為線程6獲得邏輯鎖的時間t6。可以看出,這種情況下,表2中的第二行數據被更新,故這種情況所對應的影響行數值為2,資料庫伺服器可以生成影響行數值2,即用於表徵A2所對應的業務操作當前並未被執行的第三數據。這樣,當資料庫伺服器將該第三數據發送至線程6所在的終端設備後,線程6根據該第三數據,即影響行數值2,就會確定出A2所對應的業務操作當前並未被執行,故線程6將會執行A2所對應的業務操作。若當前線程7獲得了攜帶A7的操作指令,此時線程7就會通過其所在的終端設備向資料庫伺服器發送攜帶A7的第一指令,資料庫伺服器就會去執行上述程序段。此時資料庫伺服器會發現邏輯鎖表中並不存在A7,即資料庫伺服器之前從未接收過攜帶A7的操作指令。此時資料庫伺服器會向表2中插入一行新的數據,這時邏輯鎖表將會由表2更新為表3。約束條件1last_callunique_flaglockedA1t1線程11A2t2線程20A3t3線程31A4t4線程41A7t7線程71表3相應地,線程7將會持有A7所對應的業務操作的邏輯鎖。可以看出,這種情況下,表2中插入了一行新的數據,故這種情況所對應的影響行數值為1,資料庫伺服器可以生成影響行數值1,即用於表徵A7所對應的業務操作當前並未被執行的第二數據。這樣,當資料庫伺服器將該第二數據,即影響行數值1發送至線程7所在的終端設備後,線程7根據該第二數據,就會確定出A7所對應的業務操作當前並未被執行,故線程7將會執行A7所對應的業務操作。此外,為了保證各線程所在的終端設備能夠與資料庫伺服器進行正常地信息交互,各線程在獲得了攜帶某一標識信息的操作指令後,其可以先向資料庫伺服器發送第二指令,以使資料庫伺服器檢測其與終端設備之間的連接是否存在異常,並生成表徵連接是否存在異常的數據。具體地,該數據也可以通過影響行數值來進行表徵。舉例而言,當資料庫伺服器與終端設備之間的連接存在異常時,資料庫伺服器可以生成影響行數值-1(即上文中的第四數據),並將該影響行數值發送至終端設備。一般而言,資料庫伺服器在執行上述程序段時,在正常情況下,生成的影響行數值一般為0、1或2,其不可能為其他的數值,故若終端設備獲得的影響行數值為-1,那麼終端設備就可以輸出報警信號,以提示用戶檢查終端設備與資料庫伺服器之間的連接。綜上,本實施例較好地避免了在針對資料庫的同一業務操作並發的情況下,出現並發衝突的問題。相應於上述方法實施例,本發明實施例提供了一種資料庫並發控制裝置,該裝置應用於資料庫伺服器,如圖4所示,該裝置可以包括:指令接收模塊41,用於接收終端設備發送的攜帶有第一標識信息的第一指令,其中,第一指令為終端設備獲得針對資料庫伺服器中的資料庫的操作指令後發送的,第一標識信息為操作指令中所包括的第一業務操作的標識信息;第一處理模塊42,用於在資料庫伺服器的業務操作表中的第一標識信息所對應的狀態為加鎖狀態的情況下,生成用於表徵第一業務操作當前正在被執行的第一數據,其中,業務操作表中存儲有至少一個標識信息及每個標識信息所對應的狀態,該狀態包括加鎖狀態和未加鎖狀態;第一發送模塊43,用於向終端設備發送第一數據,以使終端設備在接收到第一數據後,不執行第一業務操作。本實施例中,當終端設備獲得針對資料庫的操作指令後,終端設備不會立即執行操作指令所指示的第一業務操作,而是先向資料庫伺服器發送第一指令,以使資料庫伺服器執行相應的查詢操作以及數據生成操作。最終,若終端設備接收到的為表徵第一業務操作當前正在被執行的第一數據,終端設備就不會執行第一業務操作。與現有技術相比,本實施例較好地避免了在針對資料庫的同一業務操作並發的情況下,出現並發衝突的問題。可選地,該裝置還可以包括:第二處理模塊,用於接收終端設備發送的攜帶有第一標識信息的第一指令後,在資料庫伺服器的業務操作表中不存在第一標識信息的情況下,將第一標識信息更新至業務操作表中,將第一標識信息所對應的狀態置為加鎖狀態,並生成用於表徵第一業務操作當前未被執行的第二數據;第二發送模塊,用於向終端設備發送第二數據,以使終端設備在接收到第二數據後,執行第一業務操作。可選地,該裝置還可以包括:第三處理模塊,用於接收終端設備發送的攜帶有第一標識信息的第一指令後,在資料庫伺服器的業務操作表中的第一標識信息為未加鎖狀態的情況下,將第一標識信息所對應的狀態置為加鎖狀態,並生成用於表徵第一業務操作當前未被執行的第三數據;第三發送模塊,用於向終端設備發送第三數據,以使終端設備在接收到第三數據後,執行第一業務操作。可選地,第一處理模塊,具體用於:在資料庫伺服器的業務操作表中的第一標識信息所對應的狀態為加鎖狀態,且加鎖時長不大於預設的時長閾值的情況下,生成用於表徵第一業務操作當前正在被執行的第一數據。可選地,該裝置還可以包括:第四處理模塊,用於接收終端設備發送的攜帶有第一標識信息的第一指令後,在資料庫伺服器的業務操作表中的第一標識信息為加鎖狀態,且加鎖時長大於預設的時長閾值的情況下,生成用於表徵第一業務操作當前未被執行的第三數據;第四發送模塊,用於向終端設備發送第三數據,以使終端設備在接收到第三數據後,執行第一業務操作。可選地,該裝置還可以包括:反饋信息接收模塊,用於接收終端設備在執行完第一業務操作後,發送的退出執行第一業務操作的反饋信息;狀態重置模塊,用於根據反饋信息,將業務操作表中,第一標識信息所對應的狀態置為未加鎖狀態。可選地,第一指令中包括終端設備中的第一線程的標識信息;反饋信息中包括第二線程的標識信息,狀態重置模塊,具體用於:在第一線程的標識信息和第二線程的標識信息相同的情況下,根據反饋信息,將業務操作表中,第一標識信息所對應的狀態置為未加鎖狀態。綜上,本實施例較好地保證了在同一業務操作並發時,各個終端設備對資料庫的業務操作之間不發生並發衝突。需要說明的是,在本文中,諸如第一和第二等之類的關係術語僅僅用來將一個實體或者操作與另一個實體或操作區分開來,而不一定要求或者暗示這些實體或操作之間存在任何這種實際的關係或者順序。而且,術語「包括」、「包含」或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、物品或者設備不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、物品或者設備所固有的要素。在沒有更多限制的情況下,由語句「包括一個……」限定的要素,並不排除在包括所述要素的過程、方法、物品或者設備中還存在另外的相同要素。本說明書中的各個實施例均採用相關的方式描述,各個實施例之間相同相似的部分互相參見即可,每個實施例重點說明的都是與其他實施例的不同之處。尤其,對於系統實施例而言,由於其基本相似於方法實施例,所以描述的比較簡單,相關之處參見方法實施例的部分說明即可。以上所述僅為本發明的較佳實施例而已,並非用於限定本發明的保護範圍。凡在本發明的精神和原則之內所作的任何修改、等同替換、改進等,均包含在本發明的保護範圍內。當前第1頁1&nbsp2&nbsp3&nbsp

同类文章

一種新型多功能組合攝影箱的製作方法

一種新型多功能組合攝影箱的製作方法【專利摘要】本實用新型公開了一種新型多功能組合攝影箱,包括敞開式箱體和前攝影蓋,在箱體頂部設有移動式光源盒,在箱體底部設有LED脫影板,LED脫影板放置在底板上;移動式光源盒包括上蓋,上蓋內設有光源,上蓋部設有磨沙透光片,磨沙透光片將光源封閉在上蓋內;所述LED脫影

壓縮模式圖樣重疊檢測方法與裝置與流程

本發明涉及通信領域,特別涉及一種壓縮模式圖樣重疊檢測方法與裝置。背景技術:在寬帶碼分多址(WCDMA,WidebandCodeDivisionMultipleAccess)系統頻分復用(FDD,FrequencyDivisionDuplex)模式下,為了進行異頻硬切換、FDD到時分復用(TDD,Ti

個性化檯曆的製作方法

專利名稱::個性化檯曆的製作方法技術領域::本實用新型涉及一種檯曆,尤其涉及一種既顯示月曆、又能插入照片的個性化檯曆,屬於生活文化藝術用品領域。背景技術::公知的立式檯曆每頁皆由月曆和畫面兩部分構成,這兩部分都是事先印刷好,固定而不能更換的。畫面或為風景,或為模特、明星。功能單一局限性較大。特別是畫

一種實現縮放的視頻解碼方法

專利名稱:一種實現縮放的視頻解碼方法技術領域:本發明涉及視頻信號處理領域,特別是一種實現縮放的視頻解碼方法。背景技術: Mpeg標準是由運動圖像專家組(Moving Picture Expert Group,MPEG)開發的用於視頻和音頻壓縮的一系列演進的標準。按照Mpeg標準,視頻圖像壓縮編碼後包

基於加熱模壓的纖維增強PBT複合材料成型工藝的製作方法

本發明涉及一種基於加熱模壓的纖維增強pbt複合材料成型工藝。背景技術:熱塑性複合材料與傳統熱固性複合材料相比其具有較好的韌性和抗衝擊性能,此外其還具有可回收利用等優點。熱塑性塑料在液態時流動能力差,使得其與纖維結合浸潤困難。環狀對苯二甲酸丁二醇酯(cbt)是一種環狀預聚物,該材料力學性能差不適合做纖

一種pe滾塑儲槽的製作方法

專利名稱:一種pe滾塑儲槽的製作方法技術領域:一種PE滾塑儲槽一、 技術領域 本實用新型涉及一種PE滾塑儲槽,主要用於化工、染料、醫藥、農藥、冶金、稀土、機械、電子、電力、環保、紡織、釀造、釀造、食品、給水、排水等行業儲存液體使用。二、 背景技術 目前,化工液體耐腐蝕貯運設備,普遍使用傳統的玻璃鋼容

釘的製作方法

專利名稱:釘的製作方法技術領域:本實用新型涉及一種釘,尤其涉及一種可提供方便拔除的鐵(鋼)釘。背景技術:考慮到廢木材回收後再加工利用作業的方便性與安全性,根據環保規定,廢木材的回收是必須將釘於廢木材上的鐵(鋼)釘拔除。如圖1、圖2所示,目前用以釘入木材的鐵(鋼)釘10主要是在一釘體11的一端形成一尖

直流氧噴裝置的製作方法

專利名稱:直流氧噴裝置的製作方法技術領域:本實用新型涉及ー種醫療器械,具體地說是ー種直流氧噴裝置。背景技術:臨床上的放療過程極易造成患者的局部皮膚損傷和炎症,被稱為「放射性皮炎」。目前對於放射性皮炎的主要治療措施是塗抹藥膏,而放射性皮炎患者多伴有局部疼痛,對於止痛,多是通過ロ服或靜脈注射進行止痛治療

新型熱網閥門操作手輪的製作方法

專利名稱:新型熱網閥門操作手輪的製作方法技術領域:新型熱網閥門操作手輪技術領域:本實用新型涉及一種新型熱網閥門操作手輪,屬於機械領域。背景技術::閥門作為流體控制裝置應用廣泛,手輪傳動的閥門使用比例佔90%以上。國家標準中提及手輪所起作用為傳動功能,不作為閥門的運輸、起吊裝置,不承受軸向力。現有閥門

用來自動讀取管狀容器所載識別碼的裝置的製作方法

專利名稱:用來自動讀取管狀容器所載識別碼的裝置的製作方法背景技術:1-本發明所屬領域本發明涉及一種用來自動讀取管狀容器所載識別碼的裝置,其中的管狀容器被放在循環於配送鏈上的文檔匣或託架裝置中。本發明特別適用於,然而並非僅僅專用於,對引入自動分析系統的血液樣本試管之類的自動識別。本發明還涉及專為實現讀