【问题标题】:Should I use a relational database for storing my XML documents我应该使用关系数据库来存储我的 XML 文档吗
【发布时间】:2013-04-24 11:29:36
【问题描述】:

我使用并编写使用各种模式以 XML 编写的技术文档。我开发了一个相当简单的 Windows 窗体应用程序,我们现在在办公室将其用作工作流系统。该程序可以签入、签出和移动验证过程。该程序使用一个通用的“data.xml”文件进行读写,从该文件中跟踪笔记、作者、状态和各种其他内容。

但是,目前应用程序指向共享驱动器上的文件夹结构,其中包含每个项目中的所有 xml 文件,以及保存程序项目数据的 data.xml 文件。因此,当有人签出文件时,应用程序只需将文件从一个文件夹移动到另一个文件夹(用户不可见),更新 data.xml 文件,然后更新 UI 中的 listViews。

这很好用,当然除非几个人在处理同一个项目,并且客户端应用程序尝试同时写入 data.xml 文件。

所以我想我想做的是将整个系统迁移到数据库。因此,它不是将 XML 文件存储在文件夹中,而是将它们存储在 SQL 等数据库中。现在我完全没有数据库经验,因此希望能有一个指针让我朝着正确的方向前进。理想情况下,我需要能够查询数据库中的 xml 文档,所以我希望能够使用 Xquery,并且理想情况下在所有文件上运行进程。例如,目前我可以在整个项目上运行 XSLT,因为它们只是放在一个文件夹中。

所以我的问题是,为了保留这种功能,我应该查看哪种类型的数据库? SQL 之类的关系型数据库,或者可能是 xml 数据库?

注意:每个 xml 文件最大为几百 Kbs。

【问题讨论】:

    标签: sql xml database


    【解决方案1】:

    我会说将数据库用于项目和客户特定数据,而不是将 xml 文档存储在数据库中。如果您的大多数 xml 文件不会延迟太多,您可以使用 xml 模板并回到您使用 XSLT 更新这些模板之前呈现有用数据的观点。我的 xml 模板去哪里了?它可以在您的文件系统或数据库中。这样可以避免存储大量的xml文档,避免xml代码在数据库中的重复。

    【讨论】:

    • 感谢您的评论。 xml,或者至少是 xml 标记中的内容,因文档而异。我最终确实希望以任何一种方式将其全部放入数据库中,因此我想知道建议采用哪种方式。谢谢。
    【解决方案2】:

    你能不能找到一个源代码控制系统,一次只允许一个人签出一个文件。或者只是使用某种文件锁定机制来限制一次只能访问一个人。

    【讨论】:

      【解决方案3】:

      “...为了保留这种功能,我应该查看哪种类型的数据库?”

      实际上只有一种数据库类型 - RDBM。所有类型的关系数据库都支持 XML、文本或二进制存储,用于文件和文档等内容。

      对我来说,更大的问题是,通过普通编程和 SQL 数据库,您是否能够支持多用户环境中的文档存储。简短的回答是,我不这么认为,至少在你没有大量工作的情况下是这样。

      问题是这样的:假设你和我在同一个办公室工作。我转到文档数据库并下载文档 XYZ.xml 的副本并开始进行更改。同时,您还将获得该文档的副本并开始进行更改。完成后,我将检查我的更改(sql 中的正常更新函数)。然后,当您签入更改时,您的更改将覆盖我的更改。大问题。

      但是,如果您可以将文档签出过程限制为“独占”使用(即,一次只有一个人可以签出和签入一个文档),那么在 SQL 上存储 XML 文档是可能的,而无需大量工作。这可以通过简单地在文档存储表中设置一个标志来完成,例如 DocInUse=True。如果 DocInUse=True,则在重新签入且 DocINUse 字段 = False 之前无法再次下载该文档。我确定你会跟随。

      顺便说一下,有一些应用程序可以为您执行此操作。有来自 Microsoft 的 Team Foundation Server 和 Source Safe,以及其他允许这种存储和签出/签入处理的程序……但这些程序并不便宜。

      我希望这会有所帮助。

      【讨论】:

      • 我自己显然没有解释清楚。我不打算让几个人处理同一个 xml 文档,只是 data.xml 文件,它实际上是应用程序本身的配置文件,它存储有关谁拥有该文档的数据、与之相关的注释以及各种其他数据位关于 xml 文档本身。这是目前唯一需要同时共享的文件,这是因为我在数据库之外工作。
      • 我意识到还有其他应用程序可以做类似的事情,但它们也有很多我们不需要的功能,也没有我们需要的很多其他功能.为了清楚起见,我简要概述了该应用程序,但不想深入了解它。该程序运行良好,正是我们所需要的,我只想将它全部包含在数据库中。仅此而已。
      猜你喜欢
      • 2021-04-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多