在Oracle11g中提高XML的可读性,用于存储大型文件的二进制XML类型存储
我有一个要求,我必须处理巨大的XML文件。这意味着可能有大约1000个xml文件,这些文件的总大小大约为2GB 我需要的是将这些文件中的所有数据存储到我的Oracle数据库中。为此,我使用sqlloader将所有XML文件批量上载到数据库,并将其作为二进制XMLTYPE存储在数据库中。现在我需要查询这些文件并将数据存储在关系表中。为此,我使用了XMLTable Xpath查询。当我尝试在数据库中查询单个xml文件时,一切都很好。但是,如果它试图查询所有这些文件,则会花费太多时间,这是不可接受的 以下是我的一个示例xml内容:在Oracle11g中提高XML的可读性,用于存储大型文件的二进制XML类型存储,xml,oracle11g,xquery,xmltype,Xml,Oracle11g,Xquery,Xmltype,我有一个要求,我必须处理巨大的XML文件。这意味着可能有大约1000个xml文件,这些文件的总大小大约为2GB 我需要的是将这些文件中的所有数据存储到我的Oracle数据库中。为此,我使用sqlloader将所有XML文件批量上载到数据库,并将其作为二进制XMLTYPE存储在数据库中。现在我需要查询这些文件并将数据存储在关系表中。为此,我使用了XMLTable Xpath查询。当我尝试在数据库中查询单个xml文件时,一切都很好。但是,如果它试图查询所有这些文件,则会花费太多时间,这是不可接受的
<ABCD>
<EMPLOYEE id="11" date="25-Apr-1983">
<NameDetails>
<Name NameType="a">
<NameValue>
<FirstName>ABCD</FirstName>
<Surname>PQR</Surname>
<OriginalName>TEST1</OriginalName>
<OriginalName>TEST2</OriginalName>
</NameValue>
</Name>
<Name NameType="b">
<NameValue>
<FirstName>TEST3</FirstName>
<Surname>TEST3</Surname>
</NameValue>
<NameValue>
<FirstName>TEST5</FirstName>
<MiddleName>TEST6</MiddleName>
<Surname>TEST7</Surname>
<OriginalName>JAB1</OriginalName>
</NameValue>
<NameValue>
<FirstName>HER</FirstName>
<MiddleName>HIS</MiddleName>
<Surname>LOO</Surname>
</NameValue>
</Name>
<Name NameType="c">
<NameValue>
<FirstName>CDS</FirstName>
<MiddleName>DRE</MiddleName>
<Surname>QWE</Surname>
</NameValue>
<NameValue>
<FirstName>CCD</FirstName>
<MiddleName>YTD</MiddleName>
<Surname>QQA</Surname>
</NameValue>
<NameValue>
<FirstName>DS</FirstName>
<Surname>AzDFz</Surname>
</NameValue>
</Name>
</NameDetails>
</EMPLOYEE >
</ABCD>
虽然创建了索引,但性能仍然并没有改善。即使查询一组10个类似的xml文件也需要20多分钟,现在您可以想象查询所有1000个xml文件需要多少时间。
有人能给我建议一下如何改进这个系统吗
我的数据库的性能。由于我是新手,我不确定我是否以正确的方式进行操作。如果有更好的解决方案,请提出建议。非常感谢您的帮助。几个月过去了,没有人回答您的问题。我也没有具体的答案,但我至少可以向您指出这些额外的资源,以防您没有尝试:
- --关于最佳实践、文档等的白皮书
- --其次是XML数据库用户、产品管理人员和开发人员
SELECT t.personid, t.firstname, t.middlename,
t.surname,t.maidenname,
replace(replace(t.originalName, '<OriginalName>'),
'</OriginalName>', ' ') originalName
FROM xml_files p,
XMLTABLE (
--'ABCD/EMPLOYEE/NameDetails/Name/NameValue'
'for $i in ABCD/EMPLOYEE/NameDetails/Name/NameValue
return <row>
{$i/../../../@id}
{$i/../@NameType}
{$i/FirstName}{$i/MiddleName}{$i/OriginalName}
{$i/Surname}{$i/MaidenName}
</row>'
PASSING p.filecontent
COLUMNS
personid NUMBER PATH '@id',
nametypeid VARCHAR2(255) PATH '@NameType',
firstname VARCHAR2(4000) PATH 'FirstName',
middlename VARCHAR2(4000) PATH 'MiddleName',
surname VARCHAR2(4000) PATH 'Surname',
maidenname VARCHAR2(4000) PATH 'MaidenName',
originalName XMLTYPE PATH 'OriginalName'
) t;
CREATE INDEX myindex_xmlperson on xml_files(filecontent) indextype is xdb.xmlindex
parameters ('paths(include(ABCD/EMPLOYEE/NameDetails/Name/NameValue))');