更快的批量XML节点更新

时间:2014-01-24 07:04:39

标签: xml xquery

我们正在使用XML数据库并将XML值存储在XML数据类型列中。例如,对于Organization和Employees,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名员工更新任何节点值时出现问题。由于“修改(替换值)”一次只更新1个节点,我们必须应用循环来更新所有节点。这需要相当长的时间。我们尝试创建主要和辅助XML索引,但这不会提高更新速度。

除了在XQuery中使用Replace value Of之外,还有其他方法可以进行批量更新吗?

1 个答案:

答案 0 :(得分:0)

因此,问题中的“XML数据类型列”可靠地告诉我,您实际上并未使用Native XML数据库,而是使用支持XML Column的RDBMS。

您可以在XQuery Update中执行此操作,但我怀疑您遇到的问题与XQuery无关,而是将XML文档放入RDBMS中的表现(根据我的经验非常糟糕)。

以下XQuery是使用单个表达式更新所有EmployeeTypes的示例 -

将节点// EmployeeType的值替换为“TypeZ”

您可能会发现从RDBMS中提取文档,处理它然后在RDBMS中覆盖原始文档会更快。我的建议是使用原生XML数据库代替XML文档(例如eXist,BaseX,MarkLogic等)。