未来证明文件存储

时间:2009-06-01 12:47:20

标签: php upload synchronization filesystems

我接受用户上传的文件。每个文件在db中都有一个指针,该指针包含文件系统中文件位置的信息。 目前,我将文件非文件地存储在文件系统中,并且每个文件当前仅被命名为唯一值。所有分类和命名等都是使用db。

在应用程序中完成的

我担心的一个因素是文件同步问题。 如果我想设置文件系统同步,例如,通过桥接PC应用程序自动更新用户的文件,该系统是否仍能正常工作? 我不知道这样的系统是如何工作的,所以希望我可以得到一些意见。

基本上,表示文件的名称和位置纯粹是在数据库中最佳,特别是如果所述文件可能与pc应用程序同步?

5 个答案:

答案 0 :(得分:6)

是的,你这样做的方式是最好的方法。您正在使用文件系统来存储文件和数据库来处理结构化数据。

我要提出的一个建议是在文件系统上创建一个目录树。有一天,您可能会遇到文件系统每个目录限制的最大文件数。我已经构建了为每天或每周创建新子目录的系统。

确保您拥有良好的数据库备份以及文档存储库。

答案 1 :(得分:3)

使这样一个系统工作所需要的只是确保您使用的API(或者更可能是创建的)能够以合理的方式与数据库和文件系统进行通信。由于这是您的网站已经在做的事情,因此实施起来并不难。

事实上,您的文件被赋予标识符而不是普通英文名称,这与远程同步无关。

答案 2 :(得分:2)

将文件哈希存储在数据库而不是路径(即SHA1)中,并使用单独的数据库将哈希与路径连接起来。编写一个小应用程序,它将同步哈希数据库,这样当您将文件移动到其他位置时,可以很容易地构建具有更新路径的新数据库。

通过这种方式,您还可以让系统从不同的位置加载文件,具体取决于您用于查找文件的哈希数据库,以便在您需要人们能够从不同位置访问同一文件时提供一定的透明度(即nfs或webdav)。

答案 3 :(得分:1)

我们正好使用这个模型进行文件存储,以及(无耻插件)SabreDAV,使最终用户觉得它是一个普通的文件系统。

我认为这是一个非常精细的模型,只要查找文件并且很容易检索,就不会有问题。只需备份数据库:)

我可以给出另一个建议,我们在file-id上使用md5()来生成唯一的文件名。我们使用部分文件来生成目录结构,例如.. id 1将产生:b026324c6904b2a9cb4b88d6d61c81d1,生成的文件名将变为:

b02 / 632 / 4c6 / 904b2a9cb4b88d6d61c81d1原因是大多数稳定的文件系统在一个目录中存在大量文件(或目录)后会变得非常慢。通过几个子目录,它会更快,更快。

答案 4 :(得分:0)

The Boring Answer™:

我认为这取决于你想做什么,一如既往:)

我的意思是带你的常规网络托管公司。开发人员始终将文件同步到Web服务器。 Web服务器将散列生成的文件名存储在指向物理文件的db中是否有意义?没有。那么你无法使用你的FTP客户端登录并上传这样的文件,你必须编写一个自定义模块来让Apache工作等等。即时头痛。

Flickr使用数据库是否有意义?是的,一点没错! (再说一次,你无法使用FTP客户端登录并管理你的照片 - 这可能是一件好事!)

请记住,文件系统也是一个(非常简单)的数据库。它是一个带有许多有用的免费工具的数据库。

我的2¢

/0