
圖表 Ipedo XML 數(shù)據(jù)庫查詢引擎
這幅圖展現(xiàn)了XML檢索引擎執(zhí)行一個(gè)查詢的工作流程及相關(guān)部件。查詢語句用字符串的形式輸入到檢索引擎中,解析(parse)生成語法樹,進(jìn)行靜態(tài)類型檢查以發(fā)現(xiàn)非法數(shù)據(jù)類型。如果目標(biāo)文檔關(guān)聯(lián)模式(Schema),還需要訪問模式管理器。同時(shí)分析階段還會(huì)對(duì)查詢表達(dá)式靜態(tài)優(yōu)化,生成優(yōu)化方案。表達(dá)式優(yōu)化器是整個(gè)引擎中最重要、復(fù)雜的部分,包括謂詞重組(對(duì)條件表達(dá)式中的各種條件謂詞的順序進(jìn)行重新組合,盡可能的在執(zhí)行時(shí)縮小檢索范圍)、選擇最優(yōu)的索引,甚至重寫整個(gè)查詢語句來獲得最優(yōu)方案。XQuery引擎同時(shí)提供一個(gè)易讀的查詢方案紀(jì)錄,以方便在需要的時(shí)候開發(fā)者自己修改。
查詢執(zhí)行之前,需要界定事務(wù)(transaction)和獲得相應(yīng)的鎖(只有更新動(dòng)作需要)。一個(gè)事務(wù)被定義為必須在一個(gè)請(qǐng)求中完成的一系列連續(xù)動(dòng)作,以保證請(qǐng)求的合法性。如果一系列動(dòng)作中的某一個(gè)失敗,那么整個(gè)動(dòng)作序列需要滾回(rollback),而不是提交(commit)。申請(qǐng)鎖是為了防止對(duì)數(shù)據(jù)操作的沖突,包括對(duì)同一數(shù)據(jù)的同時(shí)修改,或者企圖讀取正在被其他人修改的數(shù)據(jù)。Ipedo XML 數(shù)據(jù)庫通過為一個(gè)事務(wù)中被修改的數(shù)據(jù)加鎖來防止可能的沖突操作,例如正在被修改的數(shù)據(jù)不允許其他人訪問。這些鎖在事務(wù)結(jié)束后會(huì)自動(dòng)釋放。
如果一個(gè)XQuery語句用到了XML 視圖,那么Integration Manager也會(huì)參與進(jìn)來,負(fù)責(zé)將查詢語句派發(fā)到各個(gè)外部數(shù)據(jù)源并收集結(jié)果。將各個(gè)數(shù)據(jù)源返回的結(jié)果匯總成最終結(jié)果,提供給應(yīng)用程序。