我正在为我的工作编写一个简单的文档管理系统。我只是一个业余爱好者,但现在已经编程了一段时间。我的问题是这个。当我通过我的应用程序删除一些文档时,我需要删除相关的数据库记录。如果抛出异常,最好的方法是什么,而不是以没有数据库记录的文件或指向不存在的文件的记录结束?
7 回答
将文件存储在数据库中。然后,您可以在不增加应用程序复杂性(MSMQ 等)的情况下拥有参照完整性。是的,这会增加你的数据库的大小。但是这些文件已经在您的服务器上,所以它只是在不同的地方相同的位。
这是一种“分布式事务”系统。您可能想编写一个合并例程并偶尔运行一次,但有时您会遇到不一致的情况。
你说“通过我的应用程序”。这是否意味着他们只能通过应用程序界面删除文件?如果是这样,请将删除包含在自定义事务中以删除文件并删除 db 记录。如果一侧失败,则回滚另一侧。
如果您想让他们从文件目录中删除文件,然后自动删除 db 记录,您可以做很多事情,包括定期清理和/或监视目录中活动的文件目录观察程序 Windows 服务和然后开始清理。
感谢您的回复。我已经在考虑走 BLOB 路线,但不确定我的老板是否会这样做。他喜欢好的目录结构,你知道吗?至于分布式事务,我对它们一无所知,但它们似乎是最专业的处理方式。但我是一个业余爱好者,而且这一切似乎都太投入了,所以我将在 BLOB 方面赢得我的老板回合。干杯。
您应该使用包含数据库和 MS 消息队列 (MSMQ) 的分布式事务。使用 Microsoft 分布式事务协调器 (DTC) 检查您的数据库是否可以注册到分布式事务中。
使用 MSMQ 对所有文件操作进行编程。
此链接可能对您有所帮助
我的一些应用程序中有类似的功能。
我所做的是首先通过 ap 删除文件,然后删除具有指向该文件的链接/指针的数据库记录。当用户请求一个文档时(这意味着该文件的链接仍然存在于数据库中),应用程序首先检查该文件,如果由于某种原因它不像预期的那样存在,它会清理数据库记录此时并优雅地通知用户“错误”。
无论如何,“孤立”文档不会发生太多,但使用此方法可确保数据库作为运行应用程序的正常部分不断被清理。
还有很多其他的方法来处理这个,但这个对我有用。
先删除数据库记录,偶尔审计一下存储库。通过审核存储库,我的意思是查找没有数据库记录的文件。如果您首先删除数据库记录,您的代码将不会查找实际不存在的文档。
您打算存储多少个文档以及什么类型的文档?