微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在内存中处理大型XML文档

我需要在内存中保存大量的 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的灵活性,我看到这种情况经常被低估.根据我使用XML和XQuery的经验,我为上面列出的内容平均节省了大约80%.

此外,如果您将灵活的XML数据强制转换为对象,那么如果您的数据结构发生变化,您将面临噩梦.

您可能想要查看28msec’s Scalable Database for flexible data这是云中的PAAS.在那里,您可以获得开箱即用的所有功能(包括负载均衡,自动恢复,持久性管理,复制,备份,自动故障转移,扩展和扩展,弹性,内存管理,分片……).

这只是我个人的意见,但它可能至少为您的问题解决方案提供了更多方面.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。