數據管理模塊DataManager新增功能說明書中國人民大學_第1頁
數據管理模塊DataManager新增功能說明書中國人民大學_第2頁
數據管理模塊DataManager新增功能說明書中國人民大學_第3頁
數據管理模塊DataManager新增功能說明書中國人民大學_第4頁
數據管理模塊DataManager新增功能說明書中國人民大學_第5頁
已閱讀5頁,還剩2頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、數據管理模塊(Data Manager)新增功能說明書文檔負責人:朱金清文檔編寫人:朱金清文檔系統版本號:OrientX Version 3.0文檔完成時間:2007/8/25開發單位:中國人民大學IDKE實驗室XML工作組1. 概述本模塊介紹數據在OrientX系統中的管理,包括數據的存儲方法,數據的導入導出,數據的存取等。向上層查詢模塊提供接口的是DataManager類。它通過調用Schema類實現模式文檔的解析和數據集的建立,通過調用ImportHandler類實現XML格式的文檔的導入,上層模塊利用它的導航接口可以提取想要的數據對象。由于原來講schema綁定到數據集中,造成了接下來

2、要完成的更新功能的不便,本文檔應運而生。在schema和數據集分開的前提下,自然也就達到操作上的松耦合。Schema的創建和DataSet的創建是兩個獨立的步驟,同樣的刪除一個DataSet不再涉及Schema的刪除。所以現在將修改(包括添加)的函數在下面第二部分中陳述。2. 數據結構描述2.1 NxdbDataManager 類 NxdbDataManager類可以說是這個模塊的主要接口的類,它的功能主要有向上層提供管理數據接口,包括: 1) 數據集的建立、刪除2) Schema的注冊、刪除3) 數據文件的導入導出4) 存取查詢需要的數據NxdbDataManager類就是封裝了這些功能的接

3、口,下面是NxdbDataManager類的具體實現1. 數據成員2. 成員函數(1) int CreateDataSet(char* dataSetName)函數名稱CreateDataSet()函數輸入dataSetName: 要創建的DataSet的名稱函數輸出0 創建成功-1 創建失敗函數功能就是調用下層AccessManager接口,創建相應的data set。函數算法描述實現基本上比較簡單,就是調用下層的函數接口要做的事情主要有:1) 判斷原來是否存在同名的DataSet2) 若不存在,則創建新的DataSet3) (原來的系統)創建OidDataSet(2) int Import

4、Doc(char* dataSetName,char* docName ,char* URL,StorageMode storageMode = DEBMode,EncoderMethod encoderMethod)函數名稱ImportDoc()函數輸入dataSetName: 文檔導入的目標Data set namedocName: 要導入的文檔名URL: 當前導入文檔對應的schema的URLstorageMode: 文檔的存儲格式(DEB,DSB,CEB,CSB)encoderMethod:文檔的編碼方式(RegionCode32Encoder等)函數輸出0 導入成功-1 導入失敗函數

5、功能在指定的數據集中導入指定的文檔,并按照指定的存儲格式存儲注意:獲取DTDTree的時候是通過URL在B+樹中查找,然后獲取相應的SchemaID(其實是頁中的pageNo來標識),接著通過此SchemaID函數算法描述本文件主要是調用SAX2提供的文檔導入接口,根據遍歷文檔遇到不同的節點而調用自定義的處理函數,因此在該函數主要是設置我們的處理函數。主要由SAX2XMLReader以下兩個來完成:setErrorHandler(ErrorHandler* const handler);setContentHandler(ContentHandler* const handler);(3)in

6、t RegisterSchema(char* dtdFileName,char* URL)函數名稱RegisterSchema ()函數輸入dtdFileName: 要導入的schema的文件URL: 要導入的schema的URL地址函數輸出0 導入成功-1 導入失敗函數功能注冊一個schema,并將其命名為URL,主要是在DataSet號為2的DataSet中注冊一個Schema,主要完成的任務是將*.xsd文件讀取出來并解析成DTDTree,然后將DTDTree打成流存儲在磁盤中。函數算法描述利用SchemaParser將*.xsd文件解析成DTDTree將DTDTree解析成字節流然后存

7、儲到磁盤中將Schema存儲后得到的SchemaNO和URL存儲到Schema索引中,其中Schema索引包括URL,NO,RegisterTime,其中URL為主索引,而NO為二級索引。(4)int ExportDoc(char* dataSetName,char* oldDocName,char* newDocName)函數名稱ExportDoc()函數輸入dataSetName:要導出的文檔所在的DataSetNameoldDocName: 要導出的文檔的原始名稱newDocName: 要導出的文檔的新名稱函數輸出0 導入成功-1 導入失敗函數功能將某個文檔到處到新的文檔中函數算法描述調

8、用StorageFormat的ExportDoc2007-07-22CDEBStorageMode(1)ElementNode* CDEBStorageMode:GetParent( ElementNode* cele )實現步驟:1. 獲取cele的父親結點,如果父親節點為ElementNode,則返回,否則執行下一步驟2. 獲取父親結點(為RecordNode),然后讀出父親結點的parent Code Buffer,3. 對CodeBuffer進行解析(ReadDEBRecIndexKey函數)4. 對解析出來的Code的IndexKey(RegionCode32對應的m_start),

9、如果是0,那么當前結點為根節點,那么根節點的父親結點為空NULL。5. 通過Code去ElementNodeCache中查找,找到則返回,并修改指針6. 如果找不到,那么利用GetElement(Code*)去Disk中解析出ElementNode,然后修改相應的指針.7. ElementNode結點在Cache中不存在,那么將ElementNode加入到Cache中以備下次使用(2)ElementNode* CDEBStorageMode: GetFirstChild( ElementNode* cele )1. 首先得到cele的firstChild記作curNode,如果curNode不

10、為空,進行以下三個步驟地循環體,如果curNode為空那么跳出循環,執行第5步。2. 如果當前結點為ElementNode,那么返回當前結點。3. 如果當前結點為TextNode,那么將curNode指向curNode的右兄弟。4. 如果當前結點為RecordNode,那么跳出循環。5. 如果curNode結點位NULL,那么返回NULL6. 此時當前結點curNode為RecordNode,首先判斷curNode->root是否為空,如果不為空,那么返回的結果為curNode->root,然后修改指針;如果為空,執行以下步驟7. 如果為空,首先根據curNode中的pCode和m

11、_DocID去緩存中查找,如果找到相應的ElementNode,那么返回的結果為找到的ElementNode,如果找不到ElementNode,那么根據pCode首先去CodeRecAddressIndex中查找出地址,然后根據地址去磁盤中還原出相應的ElementNode,然后返回這個ElementNodeMetadata Manager模塊功能說明書1. 概述一個數據庫系統,元數據信息的管理應該作為一個單獨的模塊進行管理,所有在撇開原有數據的捆綁之后,元數據開始有自己的管理家園了。本模塊主要負責元數據(Schema信息)的管理,主要包括Schema的注冊,Schema的保存,Schema的

12、加載(導出DTDTree)和Schema的刪除功能。在第二部分詳細介紹下Metadata的各個接口及其實現的細節。2. 數據結構描述2.1 MetaDataManager類本類主要負責Schema信息的主要功能實現類,包括系統運行開始時的初始化,然后用戶進行的Schema的注冊,Schema的保存、刪除和加載等操作。需要注意的是,在Metadata進行保存的同時,因為用戶只對Schema URL感知,而對底層的SchamaNO(可以理解成為Schema在系統中的ID號)卻一無所知,所以得有一個專門負責管理Schame的登記的工具,簡稱為Schema URL和ID號的映射表,簡稱表<URL

13、,SchemaNo>。對于表<URL,SchemaNo>的管理,本系統借用Bekerley DB進行管理,所以在初始化階段必須把相應的Bekerley初始化好,然后在進行Schema的注冊時要把相應的項加入到Bekerley DB中。2.2 MetaDataManager的成員函數(1) void Initialize()函數名稱Initialize ()函數輸入無函數輸出無函數功能首先因為本系統中,每個數據單元的申請都是以DataSet的形式申請的,所以Metadata也是屬于一個DataSet的,本系統規定2號Set屬于Metadata的,初始化對應的<URL,Sc

14、hemaNO>索引表。函數算法描述實現基本上比較簡單,就是調用下層的函數接口要做的事情主要有:4) 判斷2號Set是否存在5) 若不存在,則創建新的SET,名稱為DTDDATASET6) 初始化<URL,SchemaNO>索引表。(2) void RegisterSchema(char* url, char* dtdfile)函數名稱RegisterSchema ()函數輸入char* url : 要導入的Schema的URL(此時URL沒有前綴),其中前綴為:"char* dtdfile :要導入的Schema文件的文件全路徑名稱函數輸出無函數功能將沒有前綴的UR

15、L構造成有前綴的URL,然后將Schema文件通過SchemaParser類型解析成DTDTree,然后對DTDTree進行編碼函數算法描述主要完成Schema保存和<URL,SchemNO>索引表的添加:1) 獲取完整的URL(Prefix + 文件名“bib.xml”等)2) 將Schema文件解析成DTDTree3) 對DTDTree進行編碼4) 保存(DTDFlusher函數)DTDTree(注意:這里面,因為遺留下來的DTDTree中有一個setID,這里把它引用過來,不過它的意義不是setID了,而是對于2號數據集也就是Scheme專用的數據集的邏輯頁號。)5) 將第一

16、步和第四步分別得到的URL和setID(實際上為lpNO)組成一個項保存到索引表中。(3) void DeleteSchema(char* url)函數名稱DeleteSchema ()函數輸入char* url : 要刪除的Schema的URL其中前綴為:"函數輸出無函數功能刪除相應的schema 函數算法描述1) 首先通過URL在<URL,SchemaNO>索引表中查找2) 如果找不到,則返回3) 如果找到,此時這個SchemaNO就是在DataSet中的邏輯頁號,將這段空間利用AccessManager的free操作即可釋放(4) void ExportSchema

17、(char* url)函數名稱ExportSchema ()函數輸入char* url : 要導出的Schema的URL其中前綴為:"函數輸出無函數功能導出相應的schema 函數算法描述存儲模塊改進功能設計說明書1引言編寫本說明書是為了向讀者介紹OrientX系統中,數據存儲模塊的設計思路及使用方法。需要注意的是另一個模塊:數據存取模塊。雖然這兩個模塊在名字上只有一字之差,但兩個模塊在功能作用上有很大的不同。本模塊重點介紹在OrientX系統中四種存儲方式的特點和實現。而數據存取模塊重點在數據的導入、導出和存取,及相關的數據模式的建立。2總體設計設計背景:由于原系統在處理數據存儲時

18、,對于不同的存儲策略比如DEB或者DSB等,都在同一個函數中實現,通過每個結點的不同類型用SwitchCase語句進行區分,這樣給代碼閱讀和實現以及以后的維護都帶來一定的困難,所以提出,各自分工,各行其職的方法,Version3.0版本主要為了實現Update功能,所以只實現了DEB存儲策略的儲存及其數據獲取方法。設計方案及其總體思想:1、首先,每個記錄的保存發生變化。同樣地,也是利用SAX接口,在遇到相應的字符時調用相應的回調函數,這些處理都與先前的版本一樣,但是在endElement時,保存每個記錄的數據內容不同,現在,由于脫離了Schema的捆綁約束,而引入了每個TagName對應的全局<ID,Name>影射表。每個結點需要保存的內容有:(1)父親結點的Code對應的有效標識(2)當前結點的TagID,Code,(3)孩子結點的Tag,Code對應的有效標識。具體存儲

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論