2016-12-19 80 views
0

我正在解析&独立的java应用程序(spring引导),它处理3〜4个左右的几个大xml文件转到生成一个文件合并3个文件中的数据(第一个文件是产品的规格,第二个产品的细节,第三个文件prodect的其他信息),以便获得一个节点的全部信息,我必须读取所有文件;解析并处理XML大文件

我的问题,我们没有RAM(客户),所以我试图存在分贝(只加载文件&写它),它是一种快速,但内存使用仍然过于HIGHT 1.5转到xml文件,它将消耗1.6〜1.7去 所以有能降低RAM使用预先

由于任何溶液

+4

的可能的复制[如何分析大(50 GB)的XML文件中的Java(http://stackoverflow.com/questions/26310595/how-to-parse- big-50-gb-xml-files-in-java) – DimaSan

+0

你已经使用了流解析器吗?另请参阅:http://stackoverflow.com/questions/3969713/java-xml-parser-for-huge-files糟糕的是:您可能会多次传输每个文件,但这种方式是您的最大。在读取所有内容并将其保存在内存中时,内存消耗会更低。 – Roland

+0

谢谢你的答案,是的,我使用流解析器,你提出的解决方案将工作,但对于处理时间将爆炸,所以我不能真正使用此解决方案 –

回答

0

所以最佳的解决方案是分割节点,对于每个节点i将生成一个文件,该文件的文件名是我们将要压缩的节点的ID,所以下一次我想要访问一个节点时,它会非常快速地导致压缩索引

output.zip : 
--> id_nodes1 
--> id_nodes2 
--> id_nodes3 
--> id_nodes4 
--> .... 

感谢所有的回答

+0

不知道确切的项目数量,只能猜测,但是当我在数十万个节点(以及文件)上构建这个文件系统调用时,文件系统调用是一个真正的瓶颈(再加上它会创建很多sysadmin问题,比如不可能做ls *因为这个清单太大了......)。这是*方式,方式*更快,更“系统友好”的组合项目1000左右,比创建一个文件每个项目。 – GPI

+0

如果在每个文件中对节点进行排序,则不需要每个文件在内存中具有多于1个节点。 –