【问题标题】:Many programs reading single XML Java许多程序读取单个 XML Java
【发布时间】:2020-07-01 21:35:47
【问题描述】:

我的程序使用 SAX 解析器(或者可能是 DOM 解析器)来读取位于服务器某处的 XML 文件。现在很多人使用我的程序,所以很多程序有时会访问这个 XML 文件。如果例如,是否会出现问题?两个用户(同时使用我的程序)想要同时读取(只读取而不写入)XML 文件?我是否必须在我的程序中考虑任何特别之处,还是由操作系统来处理?

不幸的是,我不熟悉同时访问文件或者如果有几个人使用我的程序并发生这种情况。

该程序是用 Java 11 构建的。

【问题讨论】:

  • 如果他们不写,应该不会引起任何问题(除了如果很多人同时访问同一个文件会变慢)。
  • @assylias 是对的,如果操作是只读的也没问题。为了获得更好的性能,请尝试缓存文件。

标签: java xml saxparser domparser


【解决方案1】:

这应该不会造成问题。这不一定是最有效的方法,但对于低吞吐量应用程序来说,它应该可以很好地工作(我们有一个内部应用程序,每天处理大约 10 个请求,这正是我们的做法。)

如果您决定更加雄心勃勃并将已解析的文档缓存在内存中,则需要注意 Java 中的默认 DOM 实现不是线程安全的——即使对于只读访问也是如此。这也是我建议人们使用第三方树模型(例如 JDOM2 或 XOM)的原因之一。

【讨论】:

  • 这意味着如果他们本地机器上的两个用户都在使用我的程序并且他们想要同时访问文档(即想要读取 XML 文档 - 使用 DOM 解析器的意思),那么这会导致问题,因为它们缓存了已解析的文档?还是我误会你了?我可以确保在同一个程序中所有这些都是线程安全的,但我无法对其他用户的程序做出反应,因为他们都使用我的程序的单独部署实例。这就是为什么我问从文件(通过 DOM)访问是否由操作系统控制。
  • 如果他们正在加载独立访问文件存储的程序的单独实例而不共享内存,那么是的,他们都必须解析文件并且除了磁盘上的文件之外没有任何共享空间.如果您希望每秒扩展到数百个用户和数十个事务,那么这不是最佳架构;您应该在 HTTP 服务器中实现应用程序并让用户远程连接到它。
  • 感谢您的解释和建议!
猜你喜欢
  • 2019-03-09
  • 2011-12-28
  • 2012-03-16
  • 1970-01-01
  • 1970-01-01
  • 2018-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多