将文件存储在文件系统上

问题描述:

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

我已经开始抽取所有的“斑点”从数据库中,并加入他们(通过虚拟文件夹)到数据文件夹

的问题是,我有媒体链接存储8000个斑点,如果我把它们在像这样的文件夹“data/< blobid>/< blobname.extension>”这个文件夹将包含许多可以管理的文件夹。

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

任何帮助,欢迎。

Grtz, 中号

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

+0

thx,我会毫不犹豫地研究这一点。 – user29964 2009-11-09 14:30:42

+0

+1 - 我不知道这种类型,但它听起来像我也应该使用它。谢谢! – 2009-11-09 14:43:10

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

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

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

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

一个更复杂的,动态的系统可以根据需要创建子级别:如果斑点的某个目录数超过预设的最大值,创建另一个10个子目录和文件移动

的BLOB数据大多数文件系统将设置了一些子目录。举例来说,如果你的ID为1-10000,你可以有:

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

其他问题我已经为你回来:为什么会这样对你不好给他们管理为BLOB?

+0

,因为我们的数据库非常庞大+我们希望将我们的文件(视频,音乐)传输到我们的Flex应用程序。 – user29964 2009-11-09 14:49:52

+0

大数据库没有问题,你是通过HTTP“流”吗? – Xailor 2009-11-09 15:28:39