VTD XML - 缓冲区重用

时间:2015-03-02 20:13:47

标签: xml performance vtd-xml

我打算在VTD中使用BufferReuse功能。 POC是否按预期工作。但我有一个基本的设计问题。这是我的问题陈述: 我的应用程序中有近1000个XML文件,它们将经常加载和解析。像〜(10-20)次一秒。 1000个XML文件的范围可以从<1KB - ~1MB。因此,为了优化代码,我想到了使用BufferReuse。

我的问题是:代码内部是否具有最大限度的XML数量或者由BufferReuse功能处理的XML的集合大小?它是否会加载服务器太多,因为在最坏的情况下,我将有1000 MB(1000个文件* 1MB)的XML?它存储这些解析对象的位置?我计划实现一个缓存层,它将为每个xmls存储VTDNavigator(具有可以缓存的超时和最大大小)。如果我实现bufferReuse,它实际上会对我做同样的事情还是有什么不同呢?

此代码最终将部署在具有非常好规格的非常强大的服务器中。

2 个答案:

答案 0 :(得分:2)

通常有以下方法可以使用VTD-XML优化性能:

  1. 空格选项 - 您可以要求VTDGen忽略或保留琐碎的空格字符。默认情况下,VTDGen会抛弃 那些琐碎的白色空间。差异主要在于内存使用情况。
  2. 缓冲区重用 - 您可以要求VTDGen将VTD缓冲区重用于下一个解析任务。否则,默认情况下,VTDGen将为每个解析运行分配新缓冲区。如果您正在处理类似大小的XML文件,则此优化技术非常有用,这样VTD缓冲区页面大小在连续解析运行中保持不变。
  3. 调整LC级别 - 默认情况下,它是3.但您可以将其设置为5.当您的XML深度嵌套时,将LC级别设置为5会产生更好的XPath性能。但它会略微增加内存使用量和解析时间。
  4. 重用XPath:编译/选择XPath是一个相对较慢的操作,尤其是当您在许多小文件上运行XPath表达式时。关键是从循环中取出任何AutoPilot.selectXPath()并通过调用ap.resetXPath()重用它们。
  5. 使用VTD + XML索引 - 您可以将XML预先索引为VTD + XML格式并将其转储到磁盘上,而不是在处理请求时解析XML文件。处理请求开始时,只需在内存中加载VTD + xml即可,不再需要解析!!
  6. 覆盖功能又称。数据模板 - 因为VTD-XML在内存中保留XML,您实际上可以创建一个模板XML文件(在vtd + xml中预先索引),其值字段留空并让您的应用填充空白,从而创建XML数据永远不需要解析。
  7. 选项1 2 3和4通常会逐步提高性能。选项5和6通过从根本上改变XML数据的生成和使用方式来实现范式转换,并为您提供超过现有处理框架和方法的潜在巨大性能改进。首先,您可以很容易地发现xpath评估的结果也可以与VTD索引一起保持,以实际绕过XPath评估。有很多方法可以改进你的应用程序,我会把它留给你的想象力。

答案 1 :(得分:1)

如果应用程序是实时的,需要立即解析XML,那么第5点不是一个选项吗?

对于第5点,您能详细说明如何使用传入字段中的字段值替换模板XML吗?

感谢。