在Oracle11g中提高XML的可读性,用于存储大型文件的二进制XML类型存储

在Oracle11g中提高XML的可读性,用于存储大型文件的二进制XML类型存储,xml,oracle11g,xquery,xmltype,Xml,Oracle11g,Xquery,Xmltype,我有一个要求,我必须处理巨大的XML文件。这意味着可能有大约1000个xml文件,这些文件的总大小大约为2GB 我需要的是将这些文件中的所有数据存储到我的Oracle数据库中。为此,我使用sqlloader将所有XML文件批量上载到数据库,并将其作为二进制XMLTYPE存储在数据库中。现在我需要查询这些文件并将数据存储在关系表中。为此,我使用了XMLTable Xpath查询。当我尝试在数据库中查询单个xml文件时,一切都很好。但是,如果它试图查询所有这些文件,则会花费太多时间,这是不可接受的

我有一个要求,我必须处理巨大的XML文件。这意味着可能有大约1000个xml文件,这些文件的总大小大约为2GB

我需要的是将这些文件中的所有数据存储到我的Oracle数据库中。为此,我使用sqlloader将所有XML文件批量上载到数据库,并将其作为二进制XMLTYPE存储在数据库中。现在我需要查询这些文件并将数据存储在关系表中。为此,我使用了XMLTable Xpath查询。当我尝试在数据库中查询单个xml文件时,一切都很好。但是,如果它试图查询所有这些文件,则会花费太多时间,这是不可接受的

以下是我的一个示例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))');