我使用和编写使用各种模式以XML编写的技术文档。我开发了一个相当简单的Windows窗体应用程序,我们现在在办公室中将其用作工作流程系统。该程序可以签入,签出和移动验证过程。该程序使用一个通用的'data.xml'文件进行读写,从中跟踪笔记,作者,状态和其他各种事物。
但是,目前应用程序指向共享驱动器上的文件夹结构,该文件夹结构包含每个项目中的所有xml文件,以及包含程序项目数据的data.xml文件。因此,当有人签出文件时,应用程序只是将文件从一个文件夹移动到另一个文件夹(对用户不可见),更新data.xml文件后,它们会更新UI中的listViews。
这很好用,除非当然有几个人正在使用同一个项目,并且客户端应用程序试图同时写入data.xml文件。
所以我想我想做的是将整个系统迁移到数据库。因此,它不是将XML文件存储在文件夹中,而是将它们存储在SQL等数据库中。现在我完全没有数据库的经验,因此希望有一个指针可以让我朝着正确的方向发展。理想情况下,我需要能够查询数据库中的xml文档,因此我希望能够使用Xquery,并且理想情况下在所有文件上运行进程。例如,目前我可以在整个项目的cus上运行XSLT,他们只是坐在一个文件夹中。
所以我的问题是,为了保留这种功能,我应该关注什么类型的数据库?关系像SQL,还是xml数据库?
注意:xml文件每个最多只有几百Kbs。
答案 0 :(得分:0)
我不是将xml文档存储在数据库中,而是将数据库用于项目和客户特定数据。如果您的大多数xml文件不会延迟太多,您可以使用xml模板并回到使用XSLT的地步,在呈现之前使用有用的数据更新这些模板。我的xml模板在哪里?它可以位于您的文件系统或数据库中。这样可以避免存储大量的xml文档,并避免在数据库中复制xml代码。
答案 1 :(得分:0)
您可以找到一个只允许一个人一次签出文件的源控制系统,而不是所有的猴子业务。或者只是使用某种文件锁定机制来限制一次只能访问一个人。
答案 2 :(得分:-1)
“......为了保留这种功能,我应该查看哪种类型的数据库?”
实际上只有一种数据库类型 - RDBM。所有类型的关系数据库都支持文件和文档等XML,文本或二进制存储。
对我而言,更大的问题是,无论使用正常编程还是SQL数据库,您都能够在多用户环境中支持文档存储。简短的回答是,我不这么认为,至少在没有大量工作的情况下也是如此。
问题在于:让我们说你和我在同一个办公室工作。我转到文档DB并下载文档XYZ.xml的副本并开始进行更改。同时,您还可以获得该文档的副本并开始进行更改。当我完成后,我将检查我的更改(sql中的正常更新功能)。然后,当您检查更改时,您的更改将覆盖我的更改。大问题。
但是,如果您可以将文档签出过程限制为“独占”使用(即,一次只能有一个人可以签出和签入文档),那么SQL上的XML文档存储是可能的,而无需大量的工作。这可以简单地在文档存储表中设置一个标志,例如DocInUse = True。如果DocInUse = True,则在重新检入文档并且DocINUse字段= False之前,无法再次下载文档。我相信你会跟随。
顺便提一下,那里的应用程序可以帮到你。有来自Microsoft的Team Foundation Server和Source Safe,以及允许这种存储和签出/签入处理的其他程序......但这些程序并不便宜。
我希望这会有所帮助。