草庐IT

xml - 在内存中处理大型 XML 文档

coder 2024-06-27 原文

我需要在内存中保存大量 XML(很可能会使用 Oracle Coherence 作为分布式缓存)。期望在内存中保存 100,000 个 XML。这些 XML 相当大 - 大约。每个 250KB。这些 XML 由其他系统请求 - 它们只请求与它们相关的 XML 部分。此外,他们还会要求更改 XML 的内容。负载将是每分钟大约 300 个这样的请求,或多或少均匀地分布在检索和更新之间。重要的一点是 XML 不是结构化的,所以我不会为它们提供 XSD,但我有提取和更新 XML 的算法。

我的问题是什么会产生更好的性能:将 XML 按原样保存在内存中,并通过使用 XQuery 甚至使用编码过程从中提取所有数据并进行更新,或者将 XML 转换为对象,在代码中操作它们,然后在其他系统请求它们时将它们转换回 XML?

最佳答案

您有 100,000 个文档和 250 KB。这使得大约。 24 GB 原始数据。如果您将其放入内存并希望能够对其进行处理、过滤或更新,您将拥有额外的爆破系数,比方说 10。那么您最终会得到所需的 240 GB 内存容量。

因此,如果您有足够的可用内存,那当然是存放它的最佳位置。但是你需要有一个回退策略(如果节点数量增长到内存不足会发生什么?)如果你不想丢失更新,它会变得更加复杂:如果机器发生故障会发生什么?如果你在内存中更新:你什么时候将更新刷新到磁盘?还有更多事情需要考虑。

然而,要回答你的第二个问题:是否转化为物体?大多数人都想使用 PHP、ruby、Java、“.NET”等将 XML 转换为对象,甚至将 XML 存储在 SQL 数据库中。如果您想听到诚实的回答:如果您没有足够的时间和金钱可以浪费,请不要这样做。对象引入了大量额外需要的分析、设计、解析、编码、测试、维护……事实上,这完全消除了 XML 的灵 active ,而且我认为这一点一直被低估。根据我使用 XML 和 XQuery 的经验,平均节省大约 80% 我在上面列出的事情。

此外,如果您将灵活的 XML 数据强加到对象中,那么当您的数据结构发生变化时,您将面临一场噩梦。

您可能想查看 28msec's Scalable Database for flexible data这是云中的 PaaS。在那里,您可以立即获得所需的一切(包括负载平衡、自动恢复、持久性管理、复制、备份、自动故障转移、扩展和扩展、弹性、内存管理、分片……)。

这只是我个人的看法,但也许它至少对您的问题解决有更多的贡献。

关于xml - 在内存中处理大型 XML 文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9219442/

有关xml - 在内存中处理大型 XML 文档的更多相关文章

  1. ruby - 如何指定 Rack 处理程序 - 2

    Rackup通过Rack的默认处理程序成功运行任何Rack应用程序。例如:classRackAppdefcall(environment)['200',{'Content-Type'=>'text/html'},["Helloworld"]]endendrunRackApp.new但是当最后一行更改为使用Rack的内置CGI处理程序时,rackup给出“NoMethodErrorat/undefinedmethod`call'fornil:NilClass”:Rack::Handler::CGI.runRackApp.newRack的其他内置处理程序也提出了同样的反对意见。例如Rack

  2. ruby-on-rails - 如何从 format.xml 中删除 <hash></hash> - 2

    我有一个对象has_many应呈现为xml的子对象。这不是问题。我的问题是我创建了一个Hash包含此数据,就像解析器需要它一样。但是rails自动将整个文件包含在.........我需要摆脱type="array"和我该如何处理?我没有在文档中找到任何内容。 最佳答案 我遇到了同样的问题;这是我的XML:我在用这个:entries.to_xml将散列数据转换为XML,但这会将条目的数据包装到中所以我修改了:entries.to_xml(root:"Contacts")但这仍然将转换后的XML包装在“联系人”中,将我的XML代码修改为

  3. Matlab imread()读到了什么 (浅显 当复习文档了) - 2

    matlab打开matlab,用最简单的imread方法读取一个图像clcclearimg_h=imread('hua.jpg');返回一个数组(矩阵),往往是a*b*cunit8类型解释一下这个三维数组的意思,行数、数和层数,unit8:指数据类型,无符号八位整形,可理解为0~2^8的数三个层数分别代表RGB三个通道图像rgb最常用的是24-位实现方法,即RGB每个通道有256色阶(2^8)。基于这样的24-位RGB模型的色彩空间可以表现256×256×256≈1670万色当imshow传入了一个二维数组,它将以灰度方式绘制;可以把图像拆分为rgb三层,可以以灰度的方式观察它figure(1

  4. Ruby-vips 图像处理库。有什么好的使用示例吗? - 2

    我对图像处理完全陌生。我对JPEG内部是什么以及它是如何工作一无所知。我想知道,是否可以在某处找到执行以下简单操作的ruby​​代码:打开jpeg文件。遍历每个像素并将其颜色设置为fx绿色。将结果写入另一个文件。我对如何使用ruby​​-vips库实现这一点特别感兴趣https://github.com/ender672/ruby-vips我的目标-学习如何使用ruby​​-vips执行基本的图像处理操作(Gamma校正、亮度、色调……)任何指向比“helloworld”更复杂的工作示例的链接——比如ruby​​-vips的github页面上的链接,我们将不胜感激!如果有ruby​​-

  5. ruby - Faye WebSocket,关闭处理程序被触发后重新连接到套接字 - 2

    我有一个super简单的脚本,它几乎包含了FayeWebSocketGitHub页面上用于处理关闭连接的内容:ws=Faye::WebSocket::Client.new(url,nil,:headers=>headers)ws.on:opendo|event|p[:open]#sendpingcommand#sendtestcommand#ws.send({command:'test'}.to_json)endws.on:messagedo|event|#hereistheentrypointfordatacomingfromtheserver.pJSON.parse(event.d

  6. ruby - 如何使用 Ruby HTTP::Net 处理 404 错误? - 2

    我正在尝试解析网页,但有时会收到404错误。这是我用来获取网页的代码:result=Net::HTTP::getURI.parse(URI.escape(url))如何测试result是否为404错误代码? 最佳答案 像这样重写你的代码:uri=URI.parse(url)result=Net::HTTP.start(uri.host,uri.port){|http|http.get(uri.path)}putsresult.codeputsresult.body这将打印状态码和正文。

  7. Ruby 等同于 Sphinx 文档生成器? - 2

    Ruby有一些不错的文档生成器,例如Yard、rDoc,甚至Glyph。问题是Sphinx可以做网站、PDF、epub、LaTex等。它在重组文本中完成所有这些事情。在Ruby世界中有替​​代方案吗?也许是程序的组合?如果我也能使用Markdown就更好了。 最佳答案 自1.0版以来,Sphinx有了“域”的概念,它是从Python和/或C以外的语言标记代码实体(如方法调用、对象、函数等)的方法。有一个rubydomain,所以你可以只使用Sphinx本身。您唯一会缺少的(我认为)是Sphinx使用autodoc从源代码自动创建文档

  8. ruby-on-rails - 使用 Ruby 正确处理 Stripe 错误和异常以实现一次性收费 - 2

    我查看了Stripedocumentationonerrors,但我仍然无法正确处理/重定向这些错误。基本上无论发生什么,我都希望他们返回到edit操作(通过edit_profile_path)并向他们显示一条消息(无论成功与否)。我在edit操作上有一个表单,它可以POST到update操作。使用有效的信用卡可以正常工作(费用在Stripe仪表板中)。我正在使用Stripe.js。classExtrasController5000,#amountincents:currency=>"usd",:card=>token,:description=>current_user.email)

  9. ruby-on-rails - 在 irb 中阅读文档 - 2

    我怀念ipython的一件事是它有一个?为特定功能挖掘文档的运算符。我知道ruby​​有一个类似的命令行工具,但是我在irb中调用它非常不方便。ruby/irb有类似的东西吗? 最佳答案 Pry是IPython的Ruby版本,它支持?命令来查找有关方法的文档,但语法略有不同:pry(main)>?File.dirnameFrom:file.cinRubyCore(CMethod):Numberoflines:6visibility:publicsignature:dirname()Returnsallcomponentsofthef

  10. ruby-on-rails - 如何在 Rails 3 中禁用 XML 解析 - 2

    我想禁用HTTP参数的自动XML解析。但我发现命令仅适用于Rails2.x,它们都不适用于3.0:config.action_controller.param_parsers.deleteMime::XML(application.rb)ActionController::Base.param_parsers.deleteMime::XMLRails3.0中的等价物是什么? 最佳答案 根据CVE-2013-0156的最新安全公告你可以将它用于Rails3.0。3.1和3.2ActionDispatch::ParamsParser::

随机推荐