我有一个将图像存储在数据库中的应用程序。 现在我已经了解到,由于性能的原因,这不是最好的方法。
我已经开始从数据库中提取所有“blob”并将它们(通过虚拟文件夹)添加到数据文件夹中
问题是我已经存储了8000个blob,如果我把它们放在像这样的文件夹中“data /< blobid> /< blobname.extension>”此文件夹将包含许多可管理的文件夹。
我想知道如何最好地存储文件? 将它们分组为创建日期,例如“data /< year> /< month> /< day> /< blobid> /< name>”。 我还要补充一点,我们的文件存储在数据库的树中。 我想知道是否应该将树结构映射到文件系统,唯一的问题是你可以移动分支。这意味着我必须在文件系统上移动分支。
欢迎任何帮助。
Grtz, 中号
答案 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。这样,上传文件夹纯粹作为数据的存储库,而不是模仿数据结构。