在我工作的这些年里,我注意到了一种我认为是反模式的明显趋势:将内部数据维护为大的 XML 字符串。尽管两个最严重的违规者非常相似,但我已经看到了很多不同的方法。
网络服务
第一个应用程序是 Web 服务,它提供对 SQL 数据库中潜在的大量数据的访问。在启动时,它或多或少地从数据库中提取所有数据,并将其作为 XML 存储在内存中。(三次。)此应用程序的所有者称其为缓存。我称之为慢,因为在解决这个问题时遇到的每一个性能问题都可以直接追溯到这个东西。(这是一个公司环境,毫无疑问,客户端会因为性能故障而不是服务而受到指责。)这个应用程序确实使用了 XML DOM。
进口商
第二个应用程序读取作为从第三方数据库导出的结果而生成的 XML 文件。目标是将这些数据导入专有系统(归我们所有)。执行此操作的应用程序读取整个 XML 文件,并在整个导入序列中维护至少两个、有时多达四个 XML 文件的副本。请注意,数据可以在导入之前进行操作、转换和配置,因此导入器在其整个生命周期内都拥有 XML 格式的数据。不出所料,当提供一个中等大小的 XML 文件时,这个导入器就会爆炸。此应用程序仅将 XML DOM 用于其中一个副本,其余的都是原始 XML 字符串。
我对常识的理解表明,XML不是一种在内存中保存数据的好格式,而是数据在输出/传输时应转换为 XML,并在读入和导入时转换为内部数据结构。问题是,我经常遇到完全忽略可伸缩性问题的生产代码,并且为此付出了大量额外的努力。(这些应用程序中字符串解析的庞大数量令人恐惧。)
这是一个常见的失败,没有为其他人遇到的工作应用正确的工具吗?还是只是我运气不好?还是我错过了一些非常明显和好的情况,在这些情况下将大量数据存储在内存中作为 XML 是正确的和好的?