【问题标题】:Dealing with concurrent access to an XML file using a java server使用 java 服务器处理对 XML 文件的并发访问
【发布时间】:2010-08-13 10:00:24
【问题描述】:

在我编写服务器的应用程序中,将使用 XML 数据库获取有关用户的信息。管理员用户也将能够写入/读取这些文件的信息。 如何处理对这些文件的并发访问? 用户/管理员读取/写入这些文件的唯一方法是向服务器请求(套接字、TCP 连接),因此服务器必须处理此问题。 我能做些什么?我可以同步服务器方法,但我不想在管理员写入 USER B 文件时避免 USER A 访问他的文件。

【问题讨论】:

    标签: java xml tcp


    【解决方案1】:

    我的第一个建议是使用数据库而不是文件,它们已经处理了锁。

    您应该发布文件结构的示例。如果用户 A 在 fileA.xml 中有他的数据,而用户 b 在 fileB.xml 中有他的数据,则可以通过锁定给定文件并基于该文件进行同步来完成。

    【讨论】:

    • 用户 A 有他自己的文件 usera.xml,用户 B 也有他的 oen 文件 userb.xml... 我怎样才能按文件锁定?
    • 您持有指向文件的锁映射。每次用户登录并请求文件时,他都会获得对该文件的锁定(这都是同步的)。另一个用户现在可以登录并请求锁定另一个文件,它不应该干扰第一个用户。
    • 我可以锁定到一个 FileChannel instread 以实现锁定映射吗?
    • 您可以锁定任何对象,但我不确定您的服务器如何处理连接/读取/写入文件,因此很难说在哪里锁定什么。最简单的方法是获取处理它的数据库。甚至还有 xml 数据库,我只是不记得它们中的任何一个。我认为 IBM 的 DB2 有一个 XML 数据类型,并且它可以免费用于非商业用途(据我记得 2008 年的数据库课程)。
    【解决方案2】:

    正如 Jes 所说,使用数据库。
    MySQL 支持 XML:http://dev.mysql.com/tech-resources/articles/xml-in-mysql5.1-6.0.html
    大多数数据库都支持 XML,或者您可以简单地使用足够长的 VARCHAR 并获取数据并将其放入其中。如果这是您的计划,那么也许 NoSQL 解决方案也可以工作,它只是一个支持记录锁定以及其他功能的持久 HashMap。

    听起来用户之间没有冲突,您还可以做一个管理员修改文件的区域,您可以每天将其复制到用户读取数据的位置。

    【讨论】:

      猜你喜欢
      • 2020-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-25
      • 2012-03-31
      • 2021-01-18
      • 1970-01-01
      • 2023-03-14
      相关资源
      最近更新 更多