【问题标题】:Future proof file storage面向未来的文件存储
【发布时间】:2009-06-01 12:47:19
【问题描述】:

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

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

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

【问题讨论】:

    标签: php upload synchronization filesystems


    【解决方案1】:

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

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

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

    【讨论】:

    • 关于每个文件系统的每个目录限制的“最大”文件数的任何统计信息?同样,是否存在寻道性能急剧下降的顶点?例如(完全是假数字)如果在 500 个文件目录中查找/访问文件没问题,但在 5,000 之后性能会呈指数级下降……在 15,000 之后系统爬网……知道这些统计数据会很棒。
    【解决方案2】:

    要使这样的系统正常工作,您只需要确保您使用(或者更可能是创建)的 API 能够以合理的方式与数据库和文件系统通信。既然这是您的网站已经在做的事情,那么实施起来应该不难。

    您的文件被赋予标识符而不是简单的英文名称这一事实与远程同步几乎无关。

    【讨论】:

      【解决方案3】:

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

      这样,您还可以让系统从不同的位置加载文件,具体取决于您用于定位文件的哈希数据库,因此如果您需要人们能够从不同的位置访问同一个文件,它会提供一定的透明度(即 nfs 或 webdav)。

      【讨论】:

        【解决方案4】:

        我们正是使用这个模型来存储文件,加上(无耻的插件)SabreDAV,让最终用户觉得它是一个普通的文件系统。

        我认为这是一个非常好的模型,只要查找文件记录在案并且易于检索,就不会有问题。只需备份您的数据库 :)

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

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

        【讨论】:

          【解决方案5】:

          无聊的答案™:

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

          我的意思是选择您的常规网络托管公司。开发人员一直在将文件同步到 Web 服务器。 Web 服务器将哈希生成的文件名存储在指向物理文件的数据库中是否有意义?不。然后你不能用你的 FTP 客户端登录并上传这样的文件,你必须编写一个自定义模块来让 Apache 工作等等。瞬间头痛。

          Flickr 使用数据库有意义吗?是的,一点没错! (话说回来,您无法使用 FTP 客户端登录并管理您的照片——这可能是件好事!)

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

          我的 2 美分

          /0
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2018-12-29
            • 2016-10-15
            • 2011-06-11
            • 1970-01-01
            • 2016-12-11
            • 1970-01-01
            • 2011-03-17
            • 2023-03-26
            相关资源
            最近更新 更多