gpt4 book ai didi

database - 保持我的数据库和文件系统同步

转载 作者:太空狗 更新时间:2023-10-30 01:40:11 25 4
gpt4 key购买 nike

我正在开发一种软​​件,它可以在文件系统中存储文件,并在数据库中引用这些文件。因此可以在数据库中查询上传的文件,而无需访问文件系统。从我在其他帖子中读到的内容来看,大多数人说最好使用文件系统进行文件存储,而不是将二进制数据作为 BLOB 直接存储在数据库中。

所以现在我正在尝试了解设置它的最佳方法,以便数据库和文件系统保持同步并且我最终不会引用不存在的文件或文件占用文件系统中未被引用的空间。以下是我正在考虑的几个选项。

选项 1:首先添加文件引用

//Adds a reference to a file in the database
database.AddFileRef("newfile.txt");

//Stores the file in the file system
fileStorage.SaveFile("newfile.txt",dataStream);

这个选项会有问题,因为文件的引用是在实际文件之前添加的,所以另一个用户可能最终会在文件实际存储在系统中之前尝试下载文件。虽然,由于对文件的引用是事先创建的,因此在存储文件时可以使用主键值。

选项 2:首先存储文件

//Stores the file
fileStorage.SaveFile("newfile.txt",dataStream);

//Adds a reference to the file in the database
//fails if reference file does not existing in file system
database.AddFileRef("newfile.txt");

此选项更好,但会使某人有可能将文件上传到从未被引用的系统。虽然这可以通过删除任何未引用文件的“清除”或“CleanUpFileSystem”功能来补救。此选项也不允许使用数据库中的主键值存储文件。

选项 3:待定状态

//Adds a pending file reference to database
//pending files would be ignored by others
database.AddFileRef("newfile.txt");

//Stores the file, fails if there is no
//matching pending file reference in the database
fileStorage.SaveFile("newfile.txt",dataStream); database

//marks the file reference as committed after file is uploaded
database.CommitFileRef("newfile.txt");

此选项允许在上传文件之前创建主键,但也防止其他用户在上传文件之前获取对文件的引用。虽然,文件可能永远不会上传,并且文件引用会被挂起。然而,从数据库中清除未决引用也相当简单。

我倾向于选项 2,因为它很简单,而且我不必担心用户在上传文件之前尝试请求文件。存储很便宜,所以如果我最终有一些未引用的文件占用空间,那也不是世界末日。但这似乎也是一个常见问题,我想听听其他人是如何解决它的,或者我应该做的其他考虑。

最佳答案

我想提出另一种选择。使文件名始终等于其内容的哈希值。然后您可以随时安全地编写任何内容,前提是您在其他地方添加对它的引用之前这样做。

由于内容永远不会改变,所以永远不会出现同步问题。

这为您提供了免费的重复数据删除功能。删除变得更难了。我推荐夜间垃圾收集过程。

关于database - 保持我的数据库和文件系统同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15440172/

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