gpt4 book ai didi

database - 如何协调文件系统和数据库?

转载 作者:太空狗 更新时间:2023-10-30 01:45:58 26 4
gpt4 key购买 nike

我正在从事在线文件管理项目。我们在数据库(sql server)上存储引用,在文件系统上存储文件数据。

我们在上传文件和删除文件时都面临着文件系统和数据库之间的协调问题。首先,我们在数据库中创建一个引用或将文件存储在文件系统中。

问题是,如果我先在数据库中创建引用,然后将文件存储在文件系统中,但是在文件系统中存储文件时会发生任何类型的错误,然后会在数据库中创建该文件的引用但文件系统上不存在文件数据。

请给我一些如何处理这种情况的解决方案。我非常需要它。

我们删除文件时也会出现这种情况吗?

最佳答案

对文件系统的访问确实不是事务性的。您将需要自己模拟一个全有或全无分布式事务:如果数据库中的提交失败,则删除文件系统上的文件。反之,如果写入文件失败,则回滚数据库事务(这会稍微复杂一点,但这是一个粗略的草图)。

请注意,更新文件时会变得非常复杂。您需要先复制它,这样如果在覆盖文件后数据库事务失败,您仍然可以恢复文件的旧版本。是否要执行此操作取决于所需的稳健性级别。

尝试强制所有操作都通过您的应用程序(创建、写入、删除文件)。如果你不能这样做并且你不能阻止直接在文件系统上访问文件(并且可能被删除),我认为除了定期将数据库与文件系统同步之外别无他法:检查哪个文件被删除并删除数据库中的条目。为此,您可以创建一个每 X 分钟运行一次的作业。

我还建议在数据库中存储文件的散列(例如 MD5)。花一点时间来计算它,但这对我检测问题非常有用,例如如果文件在文件系统上被错误重命名但在数据库中没有重命名。这也允许定期运行一些完整性检查,以验证没有任何问题。

如果这种方法不够用(例如,您希望它更健壮),我认为除了将二进制文件存储在 LOB 数据库中之外别无他法。然后它将是真正的事务性和安全性。

关于database - 如何协调文件系统和数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2524899/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com