用于存储ASP.NET图像的目录结构-需要建议

用于存储ASP.NET图像的目录结构-需要建议,asp.net,performance,filesystems,structure,Asp.net,Performance,Filesystems,Structure,我正在开发一个应用程序,它将在第一年存储大约50000张图像,在第二年存储另外75000张图像。图片可以来自画廊、新闻图片、文章图片和个人资料图片。所以我想给每个图像一个GUID,并将GUID存储在数据库中 至于目录结构,我想的是这样的: ~/Upload/Images/F2/50/F2504E0-4F89-11D3-9A0C-0305E82C3301.jpg 因此,我使用GUID的前4个字符作为目录结构,以便在目录之间更均匀地分布图像 现在我对这种方法有一些疑问: 将所有不同类型的图像存储

我正在开发一个应用程序,它将在第一年存储大约50000张图像,在第二年存储另外75000张图像。图片可以来自画廊、新闻图片、文章图片和个人资料图片。所以我想给每个图像一个GUID,并将GUID存储在数据库中

至于目录结构,我想的是这样的:

~/Upload/Images/F2/50/F2504E0-4F89-11D3-9A0C-0305E82C3301.jpg
因此,我使用GUID的前4个字符作为目录结构,以便在目录之间更均匀地分布图像

现在我对这种方法有一些疑问:

  • 将所有不同类型的图像存储在一起,而不是使用
    ~/images/Upload/Profiles
    ~/images/Upload/Articles
    等,这被认为是一种良好的做法
  • 我还存储缩略图,它们的GUID显然不同,因此缩略图不会与原始缩略图位于同一文件夹中,不知何故,这不会给我带来好的感觉,但我想这应该没关系
  • 画廊也是如此,我习惯于将画廊存储在文件夹中,如
    ~/Images/Upload/Galleries/12
    ,现在画廊中的所有图像都分散在不同的子文件夹中,这是一个很大的性能影响吗
  • 你们还有其他关于目录结构的想法吗
正如你可能看到的那样,我有点害怕使用这种方法,但由于会有很多图像,可能甚至比我给出的数字还要多,我不得不放弃控制,我想:)

请告诉我你对此的看法,非常感谢

亲切问候,, 标记

编辑

忘了提一下,图像也会经常被删除

我唯一的评论是建议你不要按计划去做这些目录;相反,请查看是否可以将某种逻辑组织放到文件夹结构中。我敢打赌,你最终可能会因为那个基本上是随机的目录结构而变得毛骨悚然

但要记住,可能会泄露私人信息;例如,如果用户名还不是公共的,您可能不应该有显示用户名的目录结构

一种可能性;让他们以时间为基础<代码>~/Images/Upload/2010/11/15例如。如果这看起来不错,可以走得更远,如果你愿意,也可以走得不远。(例如,仅转到月份;或执行周数而不是天)。我还建议使用这样的方案保持领先的0,以便于排序


然后再次;根据您使用它们的方式,这样的结构也可能不好。我的脑海中突然闪现出这样的想法:)

我会在数据库中存储所有这些图像的基础上设计我的数据模型。忘了乱翻目录吧。然后,只需创建高效的httphandler来流式处理图像

如果要将路径存储在DB中,将图像存储在目录中,我的目标是使路径尽可能简单。最佳性能平衡可能取决于图像的大小;你可能想看看这门课

一些资源:


我认为您还可以使用sql server 2008文件流功能来存储图像并更好地管理它们

因为在文件流功能中,您可以物理存储图像,并通过SQL Server对其进行管理。所以你可以同时利用这两个优势

这里有一些很好的链接


您好,谢谢您的评论。问题是GUID的随机性中有一些逻辑组织。由于GUID生成随机字符串,它将确保它在子文件夹中按图像均匀分布(很好,相当均匀),这就是我想要的。另一个优点是,我可以在不同的位置分发目录,而不必担心路径。我也考虑过你的可能性,这似乎是一个很好的博客选择,但不是对我来说,因为当所有这些不同类型的图片进入那里(画廊等),它将是混乱的。谢谢你的建议,伙计。我可能会选择以下初始设计:/Upload/Images/Galleries/randomfolder/randomstring.jpg、/Upload/Images/Profiles/randomstring.jpg、/Upload/Images/Articles/randomstring.jpg。看起来对我来说更好,但可能也不是最好的东西哈哈