2014-01-24 54 views
0

我們使用XML數據庫和XML數據類型的列存儲XML值更新。例如組織和員工,XML將如下所示。更快的大量XML節點

<Organisation> 
    <OrganisationNumber>1001</OrganisationNumber> 
    <Employees> 
     <Employee> 
      <EmployeeId>1</EmployeeId> 
      <EmployeeNumber>ABC1</EmployeeNumber> 
      <EmployeeName>EmployeeName1</EmployeeName> 
      <EmployeeType>Type1</EmployeeType> 
     </Employee> 
     <Employee> 
      <EmployeeId>2</EmployeeId> 
      <EmployeeNumber>XYZ2</EmployeeNumber> 
      <EmployeeName>EmployeeName2</EmployeeName> 
      <EmployeeType>Type1</EmployeeType> 
     </Employee> 
    </Employees> 
</Organisation> 

1組織可能包含大約1500名員工,因此1組織的XML大小非常大。當我們要更新所有1500名員工的任何節點值

出現問題。由於'修改(替換值)'一次只更新一個節點,我們必須應用循環來更新所有節點。這需要相當長的時間。我們嘗試創建主要和輔助XML索引,但這不會提高更新速度。

是否有任何其他的方式做批量更新比使用XQuery中替換值嗎?

+1

還請說明您正在使用的XML數據庫系統,以及你如何做循環。看看你的數據,RDBMS可能更適合。 –

回答

0

所以在這個問題中的「XML數據類型列」可靠地告訴我,你是不是實際上是使用原生XML數據庫,但使用而具有XML列支持的RDBMS。

你可以在XQuery Update中做到這一點,但我懷疑你遇到的問題不是與XQuery相關,而是將XML文檔放入RDBMS中的表現(在我的經驗中非常糟糕)。

以下XQuery是與單個表達式更新所有EmployeeTypes的一個例子 -

與「TypeZ」替換節點// EmployeeType的值

你可能會發現它是更快地提取從文檔RDBMS,處理它,然後在RDBMS中覆蓋原始文檔。我的建議是使用Native XML Database代替XML文檔(例如eXist,BaseX,MarkLogic等)。