專利名稱:通用數(shù)據(jù)庫(kù)操縱器的制作方法
背景技術(shù):
本發(fā)明涉及一種用于數(shù)據(jù)庫(kù)的數(shù)據(jù)管理系統(tǒng),其中該數(shù)據(jù)庫(kù)響應(yīng)由若干用戶發(fā)起的數(shù)據(jù)操縱(manipulation)請(qǐng)求。這樣的數(shù)據(jù)庫(kù)在為諸如發(fā)出采購(gòu)訂單、準(zhǔn)備報(bào)價(jià)、安排產(chǎn)品出貨等的普通商務(wù)任務(wù)提供便利的企業(yè)管理系統(tǒng)、計(jì)算機(jī)網(wǎng)絡(luò)中特別有用。在這樣的系統(tǒng)中,數(shù)據(jù)庫(kù)存儲(chǔ)被稱為“商務(wù)對(duì)象”、用來(lái)存儲(chǔ)關(guān)于這些商務(wù)任務(wù)的數(shù)據(jù)的各種數(shù)據(jù)記錄,以及諸如關(guān)于客戶、廠家、供應(yīng)商和分銷(xiāo)商伙伴(統(tǒng)稱為“商務(wù)伙伴”)的信息的其它商務(wù)記錄。企業(yè)管理系統(tǒng)可以向若干操作者提供支持,所述若干運(yùn)營(yíng)商可能發(fā)出并發(fā)的且可能相沖突的尋址相同數(shù)據(jù)記錄的請(qǐng)求。如果不相互考慮就執(zhí)行對(duì)于數(shù)據(jù)庫(kù)的多個(gè)請(qǐng)求(這里稱為“事務(wù)(transaction)”),則可能引起數(shù)據(jù)一致性錯(cuò)誤。
目前,用于事務(wù)管理的方法嚴(yán)重依賴于系統(tǒng)的下層結(jié)構(gòu)和數(shù)據(jù)庫(kù)格式。例如,圖1示出了可用在現(xiàn)有技術(shù)中執(zhí)行的一種用于事務(wù)管理的簡(jiǎn)單方法的流程圖。如圖所示,在101,用戶1開(kāi)始與數(shù)據(jù)庫(kù)的連接,在102,該連接鎖定他感興趣的對(duì)象。如果用戶1不能成功鎖定他感興趣的對(duì)象,則過(guò)程返回101。如果對(duì)該對(duì)象成功進(jìn)行了鎖定,則沒(méi)有其他系統(tǒng)用戶(例如,用戶2)可以對(duì)被鎖定的對(duì)象進(jìn)行操作。在103,用戶1啟動(dòng)事務(wù),并在104、105、106和107執(zhí)行像“檢查(check)”、“選擇”、“插入”、“更新/刪除”這樣的數(shù)據(jù)庫(kù)操作。如果在數(shù)據(jù)庫(kù)操作過(guò)程中發(fā)生錯(cuò)誤,在108執(zhí)行事務(wù)回退(rollback),它使被鎖定對(duì)象的狀態(tài)還原到它在鎖定前的狀態(tài)。其后,過(guò)程前進(jìn)到110。如果沒(méi)有錯(cuò)誤發(fā)生,則在109用戶1可以將事務(wù)結(jié)果提交(commit)給存儲(chǔ)器,使事務(wù)保持不變(permanent),并且過(guò)程前進(jìn)到110。在110,解鎖對(duì)象并釋放連接。其他用戶,例如用戶2,只要他能夠鎖定他感興趣的對(duì)象,就能執(zhí)行事務(wù),如111、112、113、114、115、116、117、118、119和120所示。在這樣的系統(tǒng)中,如果兩個(gè)用戶向共同的對(duì)象發(fā)出并發(fā)的(concurrent)請(qǐng)求,則只有一個(gè)用戶能夠鎖定該對(duì)象。當(dāng)?shù)谝粋€(gè)用戶的鎖定有效時(shí),其他用戶的操作被延遲。
可獲得的事務(wù)管理要求從數(shù)據(jù)庫(kù)或平臺(tái)對(duì)事務(wù)直接支持。然而,不同廠家的數(shù)據(jù)庫(kù)或平臺(tái)所支持的操作是不同的。例如,有些數(shù)據(jù)庫(kù)可能不支持事務(wù)的顯式開(kāi)始(explicit start),有些只支持隱式(implicit)數(shù)據(jù)庫(kù)提交。
可獲得的方法要求相當(dāng)多的編碼以對(duì)并發(fā)進(jìn)行處理。在多用戶環(huán)境中,有兩種用于在數(shù)據(jù)庫(kù)中更新數(shù)據(jù)的公共模型樂(lè)觀并發(fā)(optimisticconcurrency)和悲觀并發(fā)(pessimistic concurrency)。悲觀并發(fā)要求大量的代碼來(lái)鎖定和解鎖數(shù)據(jù)對(duì)象。有些應(yīng)用使用時(shí)間戳來(lái)實(shí)現(xiàn)樂(lè)觀并發(fā),但也需要相當(dāng)多的編碼。而且,不可能同時(shí)支持樂(lè)觀并發(fā)和悲觀并發(fā)兩者。
像授權(quán)、檢查、約束(Constraint)、主關(guān)鍵字(Primary Key)和外關(guān)鍵字(Foreign Key)這樣的數(shù)據(jù)庫(kù)控制語(yǔ)言(DCL)在不同廠家的數(shù)據(jù)庫(kù)中的語(yǔ)法不同。一些數(shù)據(jù)庫(kù)或平臺(tái)可能不支持主關(guān)鍵字和外關(guān)鍵字檢查。由于數(shù)據(jù)驗(yàn)證(validation)不足,編程員必須編寫(xiě)相當(dāng)多行代碼來(lái)在更新數(shù)據(jù)庫(kù)之前檢查數(shù)據(jù)。
因此,期望提供一種提供有效的并發(fā)和數(shù)據(jù)驗(yàn)證檢查、但獨(dú)立于數(shù)據(jù)庫(kù)的類型并且不要求額外的編碼的通用數(shù)據(jù)操縱方法。還期望提供一種具有加強(qiáng)的異常處理、性能調(diào)整和表?xiàng)l目權(quán)限檢查的通用數(shù)據(jù)操縱方法。
發(fā)明內(nèi)容
根據(jù)本發(fā)明的一個(gè)方面,提供一種用于操縱數(shù)據(jù)庫(kù)中的數(shù)據(jù)的方法,包括響應(yīng)于來(lái)自用戶的、用以操縱數(shù)據(jù)庫(kù)中的數(shù)據(jù)對(duì)象的命令,在中間層向該數(shù)據(jù)對(duì)象分配緩存器存儲(chǔ)器;對(duì)所述緩存器存儲(chǔ)器中的數(shù)據(jù)對(duì)象執(zhí)行所述命令;以及將由該命令導(dǎo)致的任何數(shù)據(jù)變化臨時(shí)存儲(chǔ)在該緩存器存儲(chǔ)器中。
根據(jù)本發(fā)明的另一方面,提供一種數(shù)據(jù)存儲(chǔ)設(shè)備與多個(gè)用戶之間的接口,包括至少一個(gè)數(shù)據(jù)操縱模塊,用以執(zhí)行用于操縱所述數(shù)據(jù)存儲(chǔ)設(shè)備中的數(shù)據(jù)的用戶命令;緩存器部分,用于臨時(shí)存儲(chǔ)由在所述接口中執(zhí)行的用戶命令所引起的數(shù)據(jù)變化;以及命令提交模塊,用于將臨時(shí)存儲(chǔ)在所述緩存器部分中的數(shù)據(jù)變化存儲(chǔ)到所述數(shù)據(jù)存儲(chǔ)設(shè)備中。
根據(jù)本發(fā)明的再一個(gè)方面,提供一種數(shù)據(jù)存儲(chǔ)系統(tǒng),包括數(shù)據(jù)存儲(chǔ)設(shè)備;以及中間層,包括至少一個(gè)數(shù)據(jù)操縱模塊,用于執(zhí)行用來(lái)操縱該數(shù)據(jù)存儲(chǔ)設(shè)備中的數(shù)據(jù)的用戶命令;緩存器部分,用于臨時(shí)存儲(chǔ)由在所述中間層中執(zhí)行的用戶命令所導(dǎo)致的數(shù)據(jù)變化;以及命令提交模塊,用于將臨時(shí)存儲(chǔ)在所述緩存器部分中的數(shù)據(jù)變化存儲(chǔ)到所述數(shù)據(jù)存儲(chǔ)設(shè)備中。
圖1是示出可獲得的事務(wù)管理方法的流程圖。
圖2是示出根據(jù)本發(fā)明實(shí)施例的中間層的框圖。
圖3是示出根據(jù)本發(fā)明實(shí)施例的檢查主關(guān)鍵字模塊的操作的流程圖。
圖4是示出根據(jù)本發(fā)明實(shí)施例的插入操作的流程圖。
圖5是示出根據(jù)本發(fā)明實(shí)施例的更新操作的流程圖。
圖6是示出根據(jù)本發(fā)明實(shí)施例的刪除操作的流程圖。
圖7是示出根據(jù)本發(fā)明實(shí)施例的選擇操作的流程圖。
圖8是示出根據(jù)本發(fā)明實(shí)施例的通用數(shù)據(jù)操縱方法的流程圖。
具體實(shí)施例方式
本發(fā)明的實(shí)施例提供一種用于商務(wù)應(yīng)用的數(shù)據(jù)庫(kù)預(yù)處理器(這里稱為“中間層”),以用于在事務(wù)提交給數(shù)據(jù)庫(kù)之前提供對(duì)數(shù)據(jù)庫(kù)事務(wù)的預(yù)處理。中間層可以臨時(shí)存儲(chǔ)變化的數(shù)據(jù),可以在更新數(shù)據(jù)庫(kù)之前驗(yàn)證和鎖定數(shù)據(jù),并且可以在調(diào)用提交方法時(shí)同步變化的數(shù)據(jù)并對(duì)它進(jìn)行整體上的解鎖。以這種方式,對(duì)象的數(shù)據(jù)庫(kù)備份(copy)可以以較短的基本(atomic)事務(wù)來(lái)鎖定和釋放。
在本發(fā)明的實(shí)施例中,對(duì)于所有的數(shù)據(jù)交互只需要六種通用方法,并且事務(wù)、隔離級(jí)別(isolation level)、異常格式和性能調(diào)整可以用這六種通用方法來(lái)集中地(centrally)執(zhí)行。本發(fā)明可以在中間層中創(chuàng)建緩存器部分(或提交段),在緩存器中執(zhí)行像插入、更新、刪除和選擇這樣的操作,并最終把數(shù)據(jù)變化存儲(chǔ)到數(shù)據(jù)存儲(chǔ)設(shè)備中的緩存器中。
在本發(fā)明的實(shí)施例中,中間層可以包括一個(gè)集中式緩存器存儲(chǔ)器來(lái)存儲(chǔ)預(yù)處理數(shù)據(jù)。緩存器存儲(chǔ)器被分成多個(gè)子段(subsection),或提交段(commitsegment)。不同用戶或連接可以被分配單獨(dú)的緩存器字段(或提交段)。典型地,一個(gè)用戶不能訪問(wèn)其他用戶的提交段??梢允褂糜脩舸羴?lái)維護(hù)用戶專用的提交段。
在本發(fā)明的實(shí)施例中,典型地,不同提交段不會(huì)具有相同的記錄,這由鎖定機(jī)制來(lái)保證。當(dāng)用戶事務(wù)引起例如通過(guò)像“插入”、“更新”和“刪除”這樣的操作對(duì)數(shù)據(jù)對(duì)象進(jìn)行寫(xiě)入時(shí),數(shù)據(jù)最初被寫(xiě)入提交段而不是數(shù)據(jù)庫(kù)本身。然而,當(dāng)用戶事務(wù)引起例如通過(guò)選擇操作從數(shù)據(jù)對(duì)象進(jìn)行讀取時(shí),該讀取可以考慮來(lái)自用戶提交段和數(shù)據(jù)庫(kù)的對(duì)象數(shù)據(jù)。
圖2示出了根據(jù)本發(fā)明實(shí)施例的中間層的框圖??梢栽诜?wù)器203的數(shù)據(jù)存儲(chǔ)設(shè)備202與用戶1、用戶2、……、用戶N之間提供中間層201。中間層201可以是服務(wù)器203中的編程接口,用來(lái)便利尋址到數(shù)據(jù)存儲(chǔ)設(shè)備202的事務(wù)。中間層201可以提供六個(gè)公共接口“插入”方法204、“更新”方法205、“刪除”方法206、“選擇”方法207、“提交”方法208和“回退”方法209。插入方法導(dǎo)致向數(shù)據(jù)對(duì)象插入新數(shù)據(jù)項(xiàng)。更新方法導(dǎo)致新數(shù)據(jù)覆蓋(overwrite)數(shù)據(jù)對(duì)象中的舊數(shù)據(jù)。刪除方法導(dǎo)致數(shù)據(jù)項(xiàng)被從數(shù)據(jù)對(duì)象刪除。選擇方法導(dǎo)致數(shù)據(jù)項(xiàng)被從數(shù)據(jù)對(duì)象中讀取。提交方法導(dǎo)致數(shù)據(jù)被存儲(chǔ)到數(shù)據(jù)庫(kù),而回退方法使數(shù)據(jù)對(duì)象的狀態(tài)回復(fù)到它在當(dāng)前事務(wù)開(kāi)始前所具有的狀態(tài)。事務(wù)可以通過(guò)一系列這些操作來(lái)建立。
為了執(zhí)行事務(wù),用戶調(diào)用這些公共接口之一。對(duì)象數(shù)據(jù)被讀取到中間層201,并且該操作可能引起臨時(shí)存儲(chǔ)在緩存器210中的對(duì)象數(shù)據(jù)的變化。變化的數(shù)據(jù)存儲(chǔ)在提交段中,但在用戶調(diào)用提交方法208之前不會(huì)永久存儲(chǔ)在數(shù)據(jù)存儲(chǔ)設(shè)備中。如果用戶不想永久存儲(chǔ)數(shù)據(jù)操作,則用戶例如可以調(diào)用回退方法209。
因此,用戶通過(guò)調(diào)用這些接口而非編寫(xiě)代碼來(lái)執(zhí)行數(shù)據(jù)操作。中間層處理事務(wù)管理,節(jié)省用戶的時(shí)間和精力。
在本發(fā)明的實(shí)施例中,數(shù)據(jù)驗(yàn)證也可以通過(guò)中間層來(lái)檢查。例如,如圖2所示,中間層201具有下列模塊用于數(shù)據(jù)驗(yàn)證檢查數(shù)據(jù)結(jié)構(gòu)模塊211、檢查主關(guān)鍵字模塊212和檢查外關(guān)鍵字模塊213。
檢查數(shù)據(jù)結(jié)構(gòu)模塊211可以確保從用戶接收的數(shù)據(jù)的結(jié)構(gòu)與當(dāng)數(shù)據(jù)對(duì)象駐留在數(shù)據(jù)庫(kù)中時(shí)數(shù)據(jù)對(duì)象的結(jié)構(gòu)匹配,從而使插入、更新和刪除操作不會(huì)導(dǎo)致錯(cuò)誤。模塊211比較接收到的數(shù)據(jù)的結(jié)構(gòu)與數(shù)據(jù)存儲(chǔ)設(shè)備中的以及緩存器中的數(shù)據(jù)的結(jié)構(gòu)。如果它們相同,則允許插入、更新或刪除操作。否則,向用戶呈現(xiàn)錯(cuò)誤消息。
檢查主關(guān)鍵字模塊212確保新條目的主關(guān)鍵字在插入操作之前在數(shù)據(jù)存儲(chǔ)設(shè)備的數(shù)據(jù)庫(kù)中不存在,但在更新操作之前在數(shù)據(jù)庫(kù)中存在。主關(guān)鍵字是數(shù)據(jù)庫(kù)表中被索引且保持該表的主順序的域。如果數(shù)據(jù)庫(kù)具有條目的主關(guān)鍵字,則數(shù)據(jù)庫(kù)已經(jīng)具有該條目,所以用戶可以更新該條目,但是不能將具有相同主關(guān)鍵字的條目插入到數(shù)據(jù)庫(kù)中。如果數(shù)據(jù)庫(kù)不具有條目的主關(guān)鍵字,則用戶可以將該條目插入到數(shù)據(jù)庫(kù)中,但是不能對(duì)該條目執(zhí)行更新操作。
圖3示出了根據(jù)本發(fā)明實(shí)施例的檢查主關(guān)鍵字模塊212的操作的流程圖。在300,中間層響應(yīng)于用戶活動(dòng)而接收新的條目。在301,模塊212通過(guò)調(diào)用用于管理對(duì)數(shù)據(jù)庫(kù)的同時(shí)訪問(wèn)的數(shù)據(jù)并發(fā)策略來(lái)獲得關(guān)鍵字域(key field)。從302到303,該模塊檢查緩存器,特別是會(huì)話緩存器221中的主關(guān)鍵字。在302,確定在條目中是否存在重復(fù)的關(guān)鍵字。如果不存在,則過(guò)程前進(jìn)到305。
如果重復(fù)的關(guān)鍵字存在且操作為插入,則在303向用戶呈現(xiàn)錯(cuò)誤消息。如果重復(fù)的關(guān)鍵字存在且操作為更新,則過(guò)程前進(jìn)到305。
由于數(shù)據(jù)操作通常涉及會(huì)話緩存器221中的數(shù)據(jù)和數(shù)據(jù)庫(kù)202中的數(shù)據(jù)兩者,因此圖3所示的實(shí)施例檢查會(huì)話緩存器中的主關(guān)鍵字和數(shù)據(jù)庫(kù)中的主關(guān)鍵字兩者。在305、306、307、308、309、310和311,該模塊可以檢測(cè)數(shù)據(jù)庫(kù)中的主關(guān)鍵字。在305,過(guò)程可以根據(jù)新條目從數(shù)據(jù)庫(kù)中選擇數(shù)據(jù),并且可以將檢索到的數(shù)據(jù)臨時(shí)存儲(chǔ)在緩存器中。該模塊在306可以確定在所檢索到的數(shù)據(jù)中是否存在重復(fù)的關(guān)鍵字。如果沒(méi)有,則過(guò)程可以前進(jìn)到307,并且插入操作被允許。
如果在所檢索到的數(shù)據(jù)中存在重復(fù)的關(guān)鍵字并且動(dòng)作為插入操作,則可以在在308向用戶呈現(xiàn)錯(cuò)誤消息。如果存在重復(fù)的關(guān)鍵字且動(dòng)作為更新操作,則可以在309將該條目的關(guān)鍵字與所檢索到的數(shù)據(jù)的關(guān)鍵字進(jìn)行比較。如果不匹配,則可以在310向用戶呈現(xiàn)錯(cuò)誤消息。否則,可以在311允許更新操作。
如果在302存在重復(fù)的關(guān)鍵字且操作為更新,則沒(méi)有必要檢查數(shù)據(jù)庫(kù)表中該條目的主關(guān)鍵字。因此,為了提高效率,模塊212不需要檢查數(shù)據(jù)庫(kù)中該條目的主關(guān)鍵字。
模塊213可以在插入或更新操作之前檢查新條目是否具有外關(guān)鍵字。在有關(guān)系的(relational)數(shù)據(jù)庫(kù)中,外關(guān)鍵字是在另一個(gè)表中被索引的一個(gè)表中的域。
因此,中間層可以為用戶檢查數(shù)據(jù)結(jié)構(gòu)、主關(guān)鍵字和外關(guān)鍵字。用戶沒(méi)有必要編寫(xiě)用于數(shù)據(jù)驗(yàn)證的代碼,從而可以節(jié)省相當(dāng)多的時(shí)間和精力。
鎖定表模塊214可以確保在插入、更新和刪除操作之前對(duì)對(duì)象施加鎖定。當(dāng)?shù)谝挥脩艚?jīng)由中間層從數(shù)據(jù)存儲(chǔ)設(shè)備讀取記錄時(shí),模塊214可以鎖定該記錄。鎖定的對(duì)象被池化(pool)到鎖定對(duì)象池222中。如果第二用戶試圖讀取同一記錄,則模塊214將根據(jù)內(nèi)部隔離級(jí)別策略向該第二用戶呈現(xiàn)錯(cuò)誤消息,或者允許第二用戶讀取該記錄。如果第二用戶試圖更新或刪除該記錄,則模塊214可以返回錯(cuò)誤消息,以指示該記錄正在被讀取,并且不能被改變。
因此,中間層可以為用戶實(shí)現(xiàn)數(shù)據(jù)并發(fā)。當(dāng)用戶訪問(wèn)緩存器或數(shù)據(jù)庫(kù)時(shí),中間層可以調(diào)用方法“鎖定表”。本發(fā)明的并發(fā)處理獨(dú)立于被訪問(wèn)的數(shù)據(jù)庫(kù)的類型,并可以節(jié)省用戶花費(fèi)在編寫(xiě)用于數(shù)據(jù)并發(fā)的代碼上的時(shí)間和精力。
在其它實(shí)施例中,模塊215可以用于異常處理。當(dāng)在數(shù)據(jù)操作、數(shù)據(jù)驗(yàn)證檢查或數(shù)據(jù)并發(fā)處理中存在錯(cuò)誤時(shí),模塊215向用戶呈現(xiàn)錯(cuò)誤消息。
模塊216可以支持權(quán)限檢查功能,該功能確定用戶是否具有執(zhí)行想要執(zhí)行的操作的權(quán)限。模塊216可以保存所有用戶的用戶ID以及用戶的權(quán)限級(jí)別的表,即,用戶具有讀取、更新和/或刪除的權(quán)限以及用戶究竟是否具有寫(xiě)入的權(quán)限的記錄。例如,一些用戶可能僅僅具有從數(shù)據(jù)存儲(chǔ)設(shè)備讀取數(shù)據(jù)的許可,但不能向數(shù)據(jù)存儲(chǔ)設(shè)備寫(xiě)入。因此,權(quán)限檢查可以在用戶訪問(wèn)緩存器或數(shù)據(jù)存儲(chǔ)設(shè)備時(shí)由中間層集中地執(zhí)行。
圖4示出了根據(jù)本發(fā)明實(shí)施例的插入操作的流程圖。插入操作可以將數(shù)據(jù)臨時(shí)插入到緩存器中或物理地插入到數(shù)據(jù)存儲(chǔ)設(shè)備中。在401,用戶可以調(diào)用插入方法204并且可以提供要插入的數(shù)據(jù)和所涉及的表的名稱。在402,插入方法可以調(diào)用用于“鎖定表”、“檢查主關(guān)鍵字”、“檢查外關(guān)鍵字”和“檢查數(shù)據(jù)結(jié)構(gòu)”的方法。如果發(fā)生錯(cuò)誤,則過(guò)程可以結(jié)束。
在403,輸入數(shù)據(jù)由放置數(shù)據(jù)到緩存器(Put Data to Buffer)模塊230插入到會(huì)話緩存器221中??梢詮臄?shù)據(jù)存儲(chǔ)設(shè)備檢索所涉及的將接收該數(shù)據(jù)的表,并將其臨時(shí)存儲(chǔ)在會(huì)話緩存器221中以作為緩存器表。輸入的數(shù)據(jù)被添加到該緩存器表中。如果緩存器或數(shù)據(jù)存儲(chǔ)設(shè)備中沒(méi)有具有所涉及的表的表名稱的條目,則可以創(chuàng)建新的表名稱,并且輸入的數(shù)據(jù)可以添加到其中。
在404,變化的數(shù)據(jù)可以被導(dǎo)出到緩存器中的臨時(shí)存儲(chǔ)區(qū)域。
在405,插入方法可以經(jīng)由產(chǎn)生和放置插入SQL(Generate and Put InsertSQL)模塊231來(lái)調(diào)用更新任務(wù)模塊220中的插入函數(shù)。變化的數(shù)據(jù)準(zhǔn)備好被存儲(chǔ)到數(shù)據(jù)庫(kù)中,并且等待將被調(diào)用的提交方法。
圖5示出了根據(jù)本發(fā)明實(shí)施例的更新操作的流程圖。該更新操作可以更新緩存器中的數(shù)據(jù)和數(shù)據(jù)存儲(chǔ)設(shè)備中的數(shù)據(jù)。
在501,用戶可以調(diào)用更新方法205,并且可以提供數(shù)據(jù)和所涉及的表的名稱。在502,更新方法可以調(diào)用用于鎖定表、檢查數(shù)據(jù)結(jié)構(gòu)、檢查主關(guān)鍵字和檢查外關(guān)鍵字的方法。如果發(fā)生錯(cuò)誤,則過(guò)程可以結(jié)束。在503,輸入的數(shù)據(jù)可以由放置數(shù)據(jù)到緩存器模塊230插入到會(huì)話緩存器221中。在504,變化的數(shù)據(jù)可以被導(dǎo)出到緩存器中的臨時(shí)存儲(chǔ)區(qū)域。在505,更新方法205可以經(jīng)由產(chǎn)生和放置更新SQL(Generate and Put Update SQL)模塊232調(diào)用更新任務(wù)模塊220中的更新函數(shù)。變化的數(shù)據(jù)準(zhǔn)備好被存儲(chǔ)到數(shù)據(jù)庫(kù)中,并且只要調(diào)用提交方法就可以被存儲(chǔ)。
圖6示出了根據(jù)本發(fā)明實(shí)施例的刪除操作的流程圖。刪除操作用來(lái)從緩存器和數(shù)據(jù)存儲(chǔ)設(shè)備中刪除數(shù)據(jù)。
在601,用戶可以調(diào)用刪除方法206,并且可以提供待刪除的數(shù)據(jù)和所涉及的表的名稱。在602,刪除方法可以調(diào)用諸如鎖定表、檢查數(shù)據(jù)結(jié)構(gòu)、檢查主關(guān)鍵字和檢查外關(guān)鍵字的方法。如果發(fā)生錯(cuò)誤,則過(guò)程可以結(jié)束。在603,可以通過(guò)放置數(shù)據(jù)到緩存器模塊230從會(huì)話緩存器221中刪除輸入的數(shù)據(jù)。在604,變化的數(shù)據(jù)可以被導(dǎo)出到緩存器中的臨時(shí)存儲(chǔ)區(qū)域。在605,刪除方法206可以通過(guò)產(chǎn)生和放置刪除SQL(Generate and Put Delete SQL)模塊233來(lái)調(diào)用更新任務(wù)模塊220中的刪除函數(shù)。變化的數(shù)據(jù)準(zhǔn)備好被存儲(chǔ)到數(shù)據(jù)庫(kù)中,并且只要調(diào)用提交方法就可以存儲(chǔ)變化的數(shù)據(jù)。
圖7示出了根據(jù)本發(fā)明實(shí)施例的選擇操作的流程圖。該選擇操作用于根據(jù)選擇標(biāo)準(zhǔn)從緩存器和數(shù)據(jù)存儲(chǔ)設(shè)備中選擇數(shù)據(jù)。
在701,用戶可以調(diào)用選擇方法207,并且可以提供選擇標(biāo)準(zhǔn)和所涉及的表的名稱。在一個(gè)實(shí)施例中,標(biāo)準(zhǔn)支持按范圍選擇。它具有選擇因子列表。每個(gè)選擇因子可以包含每個(gè)域的域名稱和選擇范圍。在702,選擇方法可以調(diào)用數(shù)據(jù)結(jié)構(gòu)檢查方法。如果發(fā)生錯(cuò)誤,則過(guò)程可以結(jié)束。在703,如果按照悲觀并發(fā)協(xié)議操作,則選擇方法可以使能鎖定,或者如果按照樂(lè)觀并發(fā)協(xié)議,則選擇方法可以禁止鎖定。被鎖定的對(duì)象可以被池化到鎖定對(duì)象池222中。在704,可以經(jīng)由從緩存器選擇(Select from Buffer)模塊241和從數(shù)據(jù)庫(kù)選擇(Select from Database)模塊242根據(jù)選擇標(biāo)準(zhǔn)從緩存器和數(shù)據(jù)庫(kù)中選擇數(shù)據(jù)。
在圖4至圖7所示的實(shí)施例中,可以通過(guò)SAP內(nèi)部表技術(shù)(Internal TableTechnology)來(lái)組織數(shù)據(jù)。
用戶可以調(diào)用提交工作模塊208以提交被插入、更新和刪除操作改變并且存儲(chǔ)在緩存器中的數(shù)據(jù),從而將該變化的數(shù)據(jù)物理地存儲(chǔ)到數(shù)據(jù)存儲(chǔ)設(shè)備中。提交工作模塊可以經(jīng)由執(zhí)行會(huì)話SQL(Execute Session SQL)模塊217將用戶的提交段中的所有變化同步到數(shù)據(jù)庫(kù)中。
用戶可以使用回退工作模塊209來(lái)撤銷(xiāo)由插入、更新或刪除操作造成的變化。
在提交工作操作或回退工作操作之后,應(yīng)當(dāng)通過(guò)調(diào)用清除會(huì)話緩存器方法218來(lái)顯式地(explicitly)清除緩存器,特別是用戶的提交段。結(jié)果,通過(guò)釋放會(huì)話鎖定方法219釋放所有表鎖定。
圖8示出了根據(jù)本發(fā)明實(shí)施例的通用數(shù)據(jù)操縱方法的流程圖。在801,用戶1可以開(kāi)始與數(shù)據(jù)庫(kù)的連接。在802,用戶1可以插入一些數(shù)據(jù)到數(shù)據(jù)庫(kù)中,然后在803釋放連接。用戶1可以在804、805和806執(zhí)行更新和刪除操作,并且在807、808和809執(zhí)行選擇操作。取決于在810是否要求了回退,用戶1可以在811將所有操作一起提交,或者在812一起回退所有操作。用戶2可以在步驟821、822、823、824、825、826、827、828、829、830、831和832并行地執(zhí)行類似的操作。與圖1所示的方法相比,連接保持的時(shí)間短得多。
緩存器210不僅用于臨時(shí)存儲(chǔ)來(lái)自用戶的數(shù)據(jù)和被用戶操作改變的數(shù)據(jù),而且還用來(lái)臨時(shí)存儲(chǔ)從數(shù)據(jù)存儲(chǔ)設(shè)備202檢索到的數(shù)據(jù)。本領(lǐng)域技術(shù)人員將會(huì)理解,在緩存器中對(duì)從數(shù)據(jù)庫(kù)中檢索到的數(shù)據(jù)執(zhí)行操作比直接在數(shù)據(jù)庫(kù)中對(duì)數(shù)據(jù)執(zhí)行操作快。中間層的性能可以通過(guò)利用交換(swapping)算法在緩存器中緩存數(shù)據(jù)存儲(chǔ)設(shè)備中的所有數(shù)據(jù)來(lái)進(jìn)一步提高。
盡管在上文參照一些實(shí)施例詳細(xì)描述了本發(fā)明,但是在本發(fā)明范圍和精神內(nèi)的變化對(duì)于本領(lǐng)域普通技術(shù)人員來(lái)說(shuō)是顯而易見(jiàn)的。例如,盡管實(shí)施例是參照計(jì)算機(jī)描述的,但是也可以使用其它電氣設(shè)備。
權(quán)利要求
1.一種用于操縱數(shù)據(jù)庫(kù)中的數(shù)據(jù)的方法,包括響應(yīng)于來(lái)自用戶的、用以操縱數(shù)據(jù)庫(kù)中的數(shù)據(jù)對(duì)象的命令,在中間層向該數(shù)據(jù)對(duì)象分配緩存器存儲(chǔ)器;對(duì)所述緩存器存儲(chǔ)器中的數(shù)據(jù)對(duì)象執(zhí)行所述命令;以及將由該命令導(dǎo)致的任何數(shù)據(jù)變化臨時(shí)存儲(chǔ)在該緩存器存儲(chǔ)器中。
2.如權(quán)利要求1所述的方法,其中,從由插入、更新、刪除和搜索構(gòu)成的組中選擇所述命令。
3.如權(quán)利要求1所述的方法,其中,所述中間層還包括數(shù)據(jù)操縱機(jī)制,該數(shù)據(jù)操作機(jī)制從用于將數(shù)據(jù)插入到數(shù)據(jù)庫(kù)中的機(jī)制、用于更新數(shù)據(jù)庫(kù)中的數(shù)據(jù)的機(jī)制、用于從數(shù)據(jù)庫(kù)中刪除數(shù)據(jù)的機(jī)制以及用于在數(shù)據(jù)庫(kù)中搜索數(shù)據(jù)的機(jī)制所構(gòu)成的組中選擇。
4.如權(quán)利要求1所述的方法,還包括如果用戶調(diào)用命令提交機(jī)制,則將數(shù)據(jù)變化存儲(chǔ)到數(shù)據(jù)庫(kù)中。
5.如權(quán)利要求1所述的方法,其中,所述中間層還包括命令回退機(jī)制。
6.如權(quán)利要求5所述的方法,還包括如果用戶調(diào)用命令回退機(jī)制,則從緩存器存儲(chǔ)器中清除所述數(shù)據(jù)。
7.如權(quán)利要求1所述的方法,還包括將緩存器存儲(chǔ)器分成多個(gè)用戶專用的提交段,每個(gè)提交段只保存一個(gè)用戶的記錄。
8.如權(quán)利要求7所述的方法,其中,通過(guò)用戶戳來(lái)保持所述提交段的用戶專用。
9.如權(quán)利要求1所述的方法,還包括在執(zhí)行命令之前,由所述中間層對(duì)照數(shù)據(jù)庫(kù)中的數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)來(lái)檢查從用戶接收到的數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)。
10.如權(quán)利要求9所述的方法,還包括如果從用戶接收到的數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)與數(shù)據(jù)庫(kù)中的數(shù)據(jù)的不同,則提供錯(cuò)誤消息。
11.如權(quán)利要求1所述的方法,還包括在執(zhí)行命令之前,由所述中間層檢查新條目是否具有主關(guān)鍵字。
12.如權(quán)利要求11所述的方法,還包括如果在數(shù)據(jù)庫(kù)中存在新條目的主關(guān)鍵字但所述命令為插入,則提供錯(cuò)誤消息。
13.如權(quán)利要求11所述的方法,還包括如果在數(shù)據(jù)庫(kù)中不存在新條目的主關(guān)鍵字但所述命令為更新,則提供錯(cuò)誤消息。
14.如權(quán)利要求1所述的方法,還包括在執(zhí)行命令之前檢查新條目是否具有外關(guān)鍵字。
15.如權(quán)利要求1所述的方法,還包括當(dāng)用戶訪問(wèn)數(shù)據(jù)庫(kù)中的記錄時(shí)鎖定該記錄。
16.如權(quán)利要求1所述的方法,還包括在執(zhí)行命令之前由所述中間層檢查用戶的權(quán)限。
17.如權(quán)利要求1所述的方法,還包括將數(shù)據(jù)庫(kù)中的所有數(shù)據(jù)緩存到緩存器存儲(chǔ)器中。
18.一種數(shù)據(jù)存儲(chǔ)設(shè)備與多個(gè)用戶之間的接口,包括至少一個(gè)數(shù)據(jù)操縱模塊,用以執(zhí)行用于操縱所述數(shù)據(jù)存儲(chǔ)設(shè)備中的數(shù)據(jù)的用戶命令;緩存器部分,用于臨時(shí)存儲(chǔ)由在所述接口中執(zhí)行的用戶命令所引起的數(shù)據(jù)變化;以及命令提交模塊,用于將臨時(shí)存儲(chǔ)在所述緩存器部分中的數(shù)據(jù)變化存儲(chǔ)到所述數(shù)據(jù)存儲(chǔ)設(shè)備中。
19.如權(quán)利要求18所述的接口,其中,所述用戶命令是從由插入、更新、刪除和搜索構(gòu)成的組中選擇的。
20.如權(quán)利要求18所述的接口,其中,所述數(shù)據(jù)操縱模塊是從由用于將數(shù)據(jù)插入到所述數(shù)據(jù)存儲(chǔ)設(shè)備中的模塊、用于更新該數(shù)據(jù)存儲(chǔ)設(shè)備中的數(shù)據(jù)的模塊、用于從該數(shù)據(jù)存儲(chǔ)設(shè)備刪除數(shù)據(jù)的模塊、以及用于在該數(shù)據(jù)存儲(chǔ)設(shè)備中搜索數(shù)據(jù)的模塊所構(gòu)成的組中選擇的。
21.如權(quán)利要求18所述的接口,還包括回退模塊,用于撤銷(xiāo)由用戶命令導(dǎo)致的數(shù)據(jù)變化。
22.如權(quán)利要求18所述的接口,其中,所述緩存器部分被分成多個(gè)用戶專用的提交段,每個(gè)提交段只保存一個(gè)用戶的記錄。
23.如權(quán)利要求22所述的接口,其中,通過(guò)用戶戳來(lái)保持所述提交段的用戶專用。
24.如權(quán)利要求18所述的接口,還包括檢查數(shù)據(jù)結(jié)構(gòu)模塊,其在執(zhí)行用戶命令之前對(duì)照所述數(shù)據(jù)存儲(chǔ)設(shè)備中的數(shù)據(jù)的結(jié)構(gòu)檢查從用戶接收到的數(shù)據(jù)的結(jié)構(gòu)。
25.如權(quán)利要求18所述的接口,還包括檢查主關(guān)鍵字模塊,其在執(zhí)行用戶命令之前檢查新條目是否具有主關(guān)鍵字。
26.如權(quán)利要求18所述的接口,還包括檢查外關(guān)鍵字模塊,其在執(zhí)行用戶命令之前檢查新條目是否具有外關(guān)鍵字。
27.如權(quán)利要求18所述的接口,還包括鎖定表模塊,其鎖定所述數(shù)據(jù)存儲(chǔ)設(shè)備中被用戶訪問(wèn)的記錄。
28.如權(quán)利要求18所述的接口,還包括權(quán)限檢查模塊,其在執(zhí)行用戶命令之前檢查用戶的權(quán)限。
29.如權(quán)利要求18所述的接口,還包括異常處理模塊,其在發(fā)生錯(cuò)誤時(shí)向用戶提供錯(cuò)誤消息。
30.如權(quán)利要求18所述的接口,還包括緩存器清除模塊,其在提交或回退命令之后清除緩存器。
31.一種數(shù)據(jù)存儲(chǔ)系統(tǒng),包括數(shù)據(jù)存儲(chǔ)設(shè)備;以及中間層,包括至少一個(gè)數(shù)據(jù)操縱模塊,用于執(zhí)行用來(lái)操縱該數(shù)據(jù)存儲(chǔ)設(shè)備中的數(shù)據(jù)的用戶命令;緩存器部分,用于臨時(shí)存儲(chǔ)由在所述中間層中執(zhí)行的用戶命令所導(dǎo)致的數(shù)據(jù)變化;以及命令提交模塊,用于將臨時(shí)存儲(chǔ)在所述緩存器部分中的數(shù)據(jù)變化存儲(chǔ)到所述數(shù)據(jù)存儲(chǔ)設(shè)備中。
32.如權(quán)利要求31所述的系統(tǒng),其中,所述用戶命令從由插入、更新、刪除和搜索構(gòu)成的組中選擇的。
33.如權(quán)利要求31所述的系統(tǒng),其中,所述數(shù)據(jù)操作模塊是從由用于將數(shù)據(jù)插入到所述數(shù)據(jù)存儲(chǔ)設(shè)備中的模塊、用于更新該數(shù)據(jù)存儲(chǔ)設(shè)備中的數(shù)據(jù)的模塊、用于從該數(shù)據(jù)存儲(chǔ)設(shè)備刪除數(shù)據(jù)的模塊、以及用于在該數(shù)據(jù)存儲(chǔ)設(shè)備中搜索數(shù)據(jù)的模塊所構(gòu)成的組中選擇的。
34.如權(quán)利要求31所述的系統(tǒng),其中,所述中間層還包括命令回退模塊,用于撤銷(xiāo)由命令導(dǎo)致的數(shù)據(jù)變化。
35.如權(quán)利要求31所述的系統(tǒng),其中,所述緩存器部分被分成多個(gè)用戶專用提交段,每個(gè)提交段只保存一個(gè)用戶的記錄。
36.如權(quán)利要求35所述的系統(tǒng),其中,通過(guò)用戶戳來(lái)保持所述提交段的用戶專用。
37.如權(quán)利要求31所述的系統(tǒng),還包括用于對(duì)照所述數(shù)據(jù)存儲(chǔ)設(shè)備中的數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)來(lái)檢查從用戶接收到的數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)的模塊。
38.如權(quán)利要求31所述的系統(tǒng),還包括用于檢查新條目是否具有主關(guān)鍵字的模塊。
39.如權(quán)利要求31所述的系統(tǒng),還包括用于檢查新條目是否具有外關(guān)鍵字的模塊。
40.如權(quán)利要求31所述的系統(tǒng),還包括用于檢查用戶的權(quán)限的模塊。
全文摘要
提供一種商業(yè)應(yīng)用中的中間層,用以總體覆蓋(wrap)所有數(shù)據(jù)庫(kù)管理操作,臨時(shí)存儲(chǔ)變化的數(shù)據(jù),在更新數(shù)據(jù)庫(kù)之前驗(yàn)證和鎖定數(shù)據(jù),以及當(dāng)調(diào)用提交方法時(shí),同步數(shù)據(jù)變化并將其作為整體進(jìn)行解鎖。在實(shí)施例中,對(duì)于所有數(shù)據(jù)交互只需要六種通用方法。事務(wù)、隔離級(jí)別、異常格式以及性能調(diào)整操作可以用這六種通用方法集中地執(zhí)行??梢栽谥虚g層創(chuàng)建緩存器部分。對(duì)存儲(chǔ)在緩存器中的數(shù)據(jù)執(zhí)行諸如插入、更新、刪除和選擇的操作。然后緩存的數(shù)據(jù)可以被存儲(chǔ)到數(shù)據(jù)存儲(chǔ)設(shè)備中。
文檔編號(hào)G06F17/30GK101046821SQ20071009210
公開(kāi)日2007年10月3日 申請(qǐng)日期2007年4月2日 優(yōu)先權(quán)日2006年3月31日
發(fā)明者魏海鈔, 石苓 申請(qǐng)人:Sap股份公司