【问题标题】:Directory structure for storing images ASP.NET - Advice needed用于存储图像 ASP.NET 的目录结构 - 需要建议
【发布时间】:2010-11-15 23:27:17
【问题描述】:

我正在开发一个应用程序,该应用程序将在第一年存储大约 50,000 张图像,第二年再存储 75,000 张图像。图片可以来自画廊、新闻图片、文章图片和个人资料图片。所以我想给每个图像一个 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 之类的文件夹中,现在画廊中的所有图像都将分散在不同的子文件夹中,这对性能有很大影响吗?
  • 你们对目录结构还有其他想法吗?

正如您可能看到的那样,我有点害怕使用这种方法,但由于会有很多图像可能比我给出的数字还要多,我认为我必须放开控制权:)

请给我你的意见,非常感谢。

亲切的问候, 标记

编辑
忘了说,图片也会经常被删除

【问题讨论】:

    标签: asp.net performance filesystems structure


    【解决方案1】:

    我唯一的意见是建议您不要按计划执行目录;相反,看看您是否可以将某种逻辑组织放入文件夹结构中。我敢打赌,你最终可能会用这种基本上随机的目录结构拉一两根头发。

    不过,请记住泄露私人信息的可能性;例如,如果用户名尚未公开,您可能不应该有显示用户名的目录结构。

    一种可能性;让它们基于时间...例如~/Images/Upload/2010/11/15。如果这看起来不错,请走得更远,或者如果您愿意,请走得更远。 (例如,只去月份;或者做周数而不是天)。我还建议在这种方案中保留前导 0,以便于排序。

    再说一遍;根据您使用它们的方式,这样的结构也可能不好。这只是突然出现在我脑海中的想法:)

    【讨论】:

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

    我会根据将所有这些图像存储在数据库中来设计我的数据模型。忘记弄乱目录。然后只需创建高效的 HttpHandler 将图像流回。

    如果您要将路径存储在数据库中并将图像存储在目录中,我的目标是使路径尽可能简单。最佳性能平衡可能取决于图像的大小;你可能想看看FileStream 类。

    一些资源:

    http://www.homeoftester.com/viewtopic.php?t=2648&sid=2f86787a27a5690db35df9b61f9e8247

    Storing Images in DB - Yea or Nay?

    http://www.sqlskills.com/BLOGS/PAUL/post/High-performance-FILESTREAM-tips-and-tricks.aspx

    【讨论】:

      【解决方案3】:

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

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

      这里有很好的链接 http://www.simple-talk.com/sql/learn-sql-server/an-introduction-to-sql-server-filestream/

      http://weblogs.asp.net/aghausman/archive/2009/03/16/saving-and-retrieving-file-using-filestream-sql-server-2008.aspx

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-09-05
        • 2011-07-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多