Gre*_*g D 6 xml language-agnostic anti-patterns
在我进入工作岗位的那些年里,我注意到了一种我认为是反模式的明显趋势:将内部数据维护为XML的大字符串.我已经看到这种做法有很多不同的方式,尽管两个最严重的罪犯非常相似.
第一个应用程序是Web服务,可以访问SQL数据库中可能存在的大量数据.在启动时,它会将数据中的所有数据或多或少地从数据库中提取出来,并将其作为XML存储在内存中.(三次.)此应用程序的所有者将其称为缓存.我称之为缓慢,因为在对抗此问题时遇到的每个性能问题都可以直接追溯到这个问题.(这是一个企业环境,客户端因为性能故障而不是服务而受到指责应该不足为奇.)此应用程序确实使用了XML DOM.
第二个应用程序读取作为从第三方数据库导出的结果生成的XML文件.目标是将此数据导入专有系统(由我们拥有).执行此操作的应用程序读取整个XML文件,并在整个导入序列中维护至少两个(有时多达四个)XML文件的副本.请注意,可以在导入之前对数据进行操作,转换和配置,因此导入器在整个生命周期内都以XML格式拥有此数据.不出所料,当提供中等大小的XML文件时,此导入程序会爆炸.此应用程序仅将XML DOM用于其中一个副本,其余都是原始XML字符串.
我对常识的理解表明,XML 不是用于在内存中保存数据的良好格式,而是在读取和导入时,数据在输出/传输和转换为内部数据结构时应转换为XML.问题是,我经常遇到完全忽略可扩展性问题的生产代码,并且经历了大量额外的努力.(在这些应用程序中,字符串解析的绝对数量令人恐惧.)
对于其他人遇到的工作来说,这是一个常见的失败吗?或者这只是我的运气不好?或者我错过了一些令人眼花缭乱的明显和良好的情况,哪些是正确的,可以将大量数据存储在内存中作为XML?