我需要在内存中保存大量的 XML(最有可能将Oracle Coherence用作分布式缓存).期望是在内存中保存100,000个XML.这些XML非常大 – 约.每个250KB.其他系统要求这些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.在那里,您可以获得开箱即用的所有功能(包括负载均衡,自动恢复,持久性管理,复制,备份,自动故障转移,扩展和扩展,弹性,内存管理,分片……).
这只是我个人的意见,但它可能至少为您的问题解决方案提供了更多方面.