我正在开发一个 Java 应用程序,它的工作是创建和保存 XML(大尺寸)。我得到的样本是 300 MB 的 XML 文件。
该应用旨在从数据库中收集大量数据并将其保存为 XML 格式。该应用程序因其大量的 IO 和内存使用而设计为并行处理 MAX 3 此类请求。
现在的要求是让它并行处理最多 50 个这样的请求。当前应用程序使用 XMLbean 创建 XML,然后将其保存到文件系统。该应用程序在 weblogic 服务器上作为 web 服务公开(它在 64 位操作系统和 Java 最大堆大小 id 4 GB 上)。
我需要你的意见:
1) 是否有一个 XML API 可以与 XSD 一起使用,并且可以用来创建 200-200 MB 的大型 XML 且开销最小? XMLbean 对我们来说工作得很好,但是有什么东西可以更好地处理它吗?
2) 将其保存到文件系统的最佳且内存效率最高的方法是什么? - 我正在考虑将当前写入器更改为 bufferedWriter 并让它在物理写入磁盘之前将 1024 字节保存到内存中。 - 增加它会有任何副作用吗?
3) 如果技术选择和服务器等没有限制 - 什么是理想的解决方案!!!
编辑 1# 数据库访问速度很快(大约占总时间的 5%)。 XML 的创建很慢(需要 80% 的时间)。节省 15%(但我看到我可以做很多改进,所以我并不担心)。 - 谢谢路易斯。
最佳答案
我遇到了类似的问题。服务器正在使用 JDOM 在 XML 文件中写入数据。多年来,这些数据越来越大,服务器越来越慢,使用的内存也越来越大。原因如下:
服务器在大哈希表和列表中积累数据。在作业结束时,他在内存中创建了带有 JDOM 的 XML 文档,然后将其写入磁盘。
我更改了 XML 编写以使用带有 XMLStreamWriter 的流方法 唯一的问题是,编写的 xml 文件不是很漂亮。这可以通过 IndentingXMLStreamWriter 来解决。
一个代码示例是:
FileOutputStream fileOutputStream = new FileOutputStream(outXmlFile);
XMLStreamWriter defaultWriter = factory.createXMLStreamWriter(fileOutputStream, encoding);
IndentingXMLStreamWriter writer = new IndentingXMLStreamWriter(defaultWriter);
writer.setIndentStep(" ");
try
{
writer.writeStartDocument(encoding, "1.0");
if (stylesheet != null)
{
writer.writeProcessingInstruction("xml-stylesheet", "type='text/xsl' href='" + stylesheet + "'");
writer.writeCharacters("\n");
}
writer.writeStartElement(TAG_ROOT);
writer.writeAttribute(TAG_OBJECT_TYPE, rootObject.getClass().getSimpleName());
...
writer.writeEndElement();
writer.writeEndDocument();
}
finally
{
writer.flush();
writer.close();
fileOutputStream.close();
}
关于java - 在 Java 中创建和保存大型 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8223805/
我有一个对象has_many应呈现为xml的子对象。这不是问题。我的问题是我创建了一个Hash包含此数据,就像解析器需要它一样。但是rails自动将整个文件包含在.........我需要摆脱type="array"和我该如何处理?我没有在文档中找到任何内容。 最佳答案 我遇到了同样的问题;这是我的XML:我在用这个:entries.to_xml将散列数据转换为XML,但这会将条目的数据包装到中所以我修改了:entries.to_xml(root:"Contacts")但这仍然将转换后的XML包装在“联系人”中,将我的XML代码修改为
我真的很习惯使用Ruby编写以下代码:my_hash={}my_hash['test']=1Java中对应的数据结构是什么? 最佳答案 HashMapmap=newHashMap();map.put("test",1);我假设? 关于java-等价于Java中的RubyHash,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/22737685/
我需要检查DateTime是否采用有效的ISO8601格式。喜欢:#iso8601?我检查了ruby是否有特定方法,但没有找到。目前我正在使用date.iso8601==date来检查这个。有什么好的方法吗?编辑解释我的环境,并改变问题的范围。因此,我的项目将使用jsapiFullCalendar,这就是我需要iso8601字符串格式的原因。我想知道更好或正确的方法是什么,以正确的格式将日期保存在数据库中,或者让ActiveRecord完成它们的工作并在我需要时间信息时对其进行操作。 最佳答案 我不太明白你的问题。我假设您想检查
我有一个正在构建的应用程序,我需要一个模型来创建另一个模型的实例。我希望每辆车都有4个轮胎。汽车模型classCar轮胎模型classTire但是,在make_tires内部有一个错误,如果我为Tire尝试它,则没有用于创建或新建的activerecord方法。当我检查轮胎时,它没有这些方法。我该如何补救?错误是这样的:未定义的方法'create'forActiveRecord::AttributeMethods::Serialization::Tire::Module我测试了两个环境:测试和开发,它们都因相同的错误而失败。 最佳答案
我正在尝试使用boilerpipe来自JRuby。我看过guide从JRuby调用Java,并成功地将它与另一个Java包一起使用,但无法弄清楚为什么同样的东西不能用于boilerpipe。我正在尝试基本上从JRuby中执行与此Java等效的操作:URLurl=newURL("http://www.example.com/some-location/index.html");Stringtext=ArticleExtractor.INSTANCE.getText(url);在JRuby中试过这个:require'java'url=java.net.URL.new("http://www
我正在尝试找出如何为我的Ruby项目创建一种“无类DSL”,类似于在Cucumber步骤定义文件中定义步骤定义或在Sinatra应用程序中定义路由。例如,我想要一个文件,其中调用了我的所有DSL函数:#sample.rbwhen_string_matches/hello(.+)/do|name|call_another_method(name)end我认为用我的项目特有的一堆方法污染全局(内核)命名空间是一种不好的做法。因此方法when_string_matches和call_another_method将在我的库中定义,并且sample.rb文件将以某种方式在我的DSL方法的上下文中
我只想对我一直在思考的这个问题有其他意见,例如我有classuser_controller和classuserclassUserattr_accessor:name,:usernameendclassUserController//dosomethingaboutanythingaboutusersend问题是我的User类中是否应该有逻辑user=User.newuser.do_something(user1)oritshouldbeuser_controller=UserController.newuser_controller.do_something(user1,user2)我
有这些railscast。http://railscasts.com/episodes/218-making-generators-in-rails-3有了这个,你就会知道如何创建样式表和脚手架生成器。http://railscasts.com/episodes/216-generators-in-rails-3通过这个,您可以了解如何添加一些文件来修改脚手架View。我想把两者结合起来。我想创建一个生成器,它也可以创建脚手架View。有点像RyanBates漂亮的生成器或web_app_themegem(https://github.com/pilu/web-app-theme)。我
这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Rubysyntaxquestion:Rational(a,b)andRational.new!(a,b)我正在阅读ruby镐书,我对创建有理数的语法感到困惑。Rational(3,4)*Rational(1,2)产生=>3/8为什么Rational不需要new方法(我还注意到例如我可以在没有new方法的情况下创建字符串)?
什么是ruby的rack或python的Java的wsgi?还有一个路由库。 最佳答案 来自Python标准PEP333:Bycontrast,althoughJavahasjustasmanywebapplicationframeworksavailable,Java's"servlet"APImakesitpossibleforapplicationswrittenwithanyJavawebapplicationframeworktoruninanywebserverthatsupportstheservletAPI.ht