处理大型XML文档
据我所知,存储为securefile binary xml的xmltype可以处理最大4 GB的文件大小。处理大型XML文档
我想知道是否有人知道处理大于4 GB xml文件的任何好方法,它们都存储在数据库中并读取\从中选择数据。
您不应该在Oracle数据库中存储如XMLType
这样的大XML文件。
Oracle中的大部分XML函数都基于Document Object Model (DOM),这要求将整个XML文档加载到内存中,包括大量的开销数据。即使在大型机器上,这通常会导致内存泄漏或类似问题。
为了将这样的XML放到数据库中,您应该考虑基于流的外部响应,基于事件的XML解析器,通常称为SAX (Simple API for XML)。几乎所有的编程语言都有SAX解析器。然后将XML的内容存储为通常的关系数据。从Oracle数据库创建如此大的XML可以“逐行”地完成到CLOB
。
这种类型的程序的处理可以通过查看在Oracle XDK Java和C组分SAX接口。
通常,当您使用SAX解析器时,您必须编写更多代码,因为它不提供任何修改或查询元素。同时还有基于流的解析器可用(例如Perl XML::Twig),它们与基于DOM的解析器一样强大。
您是否有任何引用解析XML会导致Oracle数据库中的内存泄漏? – MT0
我发现这一个:[用于XMLType的PL/SQL API](https://docs.oracle.com/cd/B28359_01/appdev.111/b28369/xdb10pls.htm#ADXDB1100):* Oracle Database 11g第1版(11.1)中,Oracle XML DB处理的每个文本节点或属性值的大小限制为64 K字节。从版本11.1开始,这个限制不再适用。*在我开发我的应用程序的前一段时间,我认为这个限制在当时适用。当然,标准的基于DOM的解析器不起作用。 –
而这一个:[XML解析为Java](https://docs.oracle.com/cd/B28359_01/appdev.111/b28394/adx_j_parser.htm#ADXDK19112)*当程序解析一个大的XML文档并创建一个DOM树在内存中,它会影响性能。*对于较早版本:[常见问题(FAQ):PL/SQL的XML解析器](https://docs.oracle.com/cd/A91773_01/ids902dl/web。 902/a88894/adx28ppl.htm#1004621):*您不应该使用DOMParser来解析50Mb XML文件。您需要查看解析任意大小文件的SAXParser,因为它不会创建内存树节点。* –
我对xml并不是很熟悉,但我已经考虑循环,在clobsize中获取大块节点,并将其存储在所述块中。但看到这些文件可能会变得很大,这将需要很长时间。 – Moptan