在文件系统上存储文件

时间:2009-11-09 14:14:32

标签: c# file hierarchy storage

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

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

问题是我已经存储了8000个blob,如果我把它们放在像这样的文件夹中“data /< blobid> /< blobname.extension>”此文件夹将包含许多可管理的文件夹。

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

欢迎任何帮助。

Grtz, 中号

4 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分:1)

一个简单的策略是根据前[几]个数字进行分组。 E.g:

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

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

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

答案 2 :(得分:1)

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

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

我回答你的另一个问题:为什么以BLOB的形式管理它们真是太糟糕了?

答案 3 :(得分:0)

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