【问题标题】:Storing files on the filesystem在文件系统上存储文件
【发布时间】:2023-04-04 05:24:01
【问题描述】:

我有一个将图像存储在数据库中的应用程序。 现在我了解到,由于性能原因,这不是最好的方法。

我已经开始从数据库中提取所有“blob”并将它们(通过虚拟文件夹)添加到数据文件夹中

问题是我已经存储了 8000 个 blob,如果我将它们放在像这样的文件夹中“data//”这个文件夹将包含许多文件夹以便管理。

我想知道如何最好地存储文件? 将它们按创建日期分组,如“数据/////”。 我还必须补充一点,我们的文件存储在数据库的树中。 我想知道是否应该将该树结构映射到文件系统,唯一的问题是您可以移动分支。这意味着我必须移动文件系统上的分支。

欢迎任何帮助。

格兹, M

【问题讨论】:

    标签: c# file hierarchy storage


    【解决方案1】:

    您使用的是什么版本的 SQL Server?因为如果您使用的是 2008,您可以使用 FILESTREAM datatype 来存储图像。这与将它们存储在文件存储中一样有效,但没有任何相关的麻烦。见Getting Traction with SQL Server 2008 Filestream

    【讨论】:

    • +1 - 我不知道这种类型,但听起来我也应该使用它。谢谢!
    【解决方案2】:

    一个简单的策略是根据前 [few] 数字进行分组。例如:

    1/
        2/
            123.blob
            129.blob
        5/
            151.blob
    2/
        0/
            208.blob
    

    这样,您就知道一个目录中的子目录永远不会超过 10 个。您当然可以使用更多或更少的(目录)级别和/或每个级别更多的数字。

    更复杂的动态系统可以按需创建子级别:如果某个目录中的 blob 数量超过预设的最大值,则再创建 10 个子目录并将文件移入。

    【讨论】:

      【解决方案3】:

      大多数 BLOB 数据的文件系统都会设置许多子目录。例如,如果您的 ID 为 1-10000,您可以:

      00/
          00/
          01/
          02/
              00020.blob
              00021.blob
              ...
          ...
      01/
      02/
      03/
      ...
      

      我要回答您的另一个问题:为什么将它们作为 BLOB 来管理对您来说如此糟糕?

      【讨论】:

      • 因为我们的数据库很大 + 我们希望将文件(视频、音乐)流式传输到我们的 flex 应用程序。
      • 大型数据库没有问题,您是否通过 HTTP 进行“流式传输”?
      【解决方案4】:

      您需要将文件存储在相关的树形结构中吗?如果不是,您可以将文件命名为 /YOURFOLDER/blobid_blobname.extension。这样,上传文件夹纯粹充当数据的存储库,而不是模仿数据结构。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-09-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-02
        相关资源
        最近更新 更多