图像数据库管理

时间:2013-08-27 05:25:55

标签: php mysql image database-design

一些背景信息:由于未按时交付项目,之前的项目经理被解雇了。我没有经验编码,但现在正带领团队完成网站。

该网站本身与Ebay类似,其中添加了待售商品。图像和文档将与项目关联,但托管在上载图像时创建的文件夹中。开发团队问我“如何使用与项目列表相关的文档来管理文件夹”。每个项目上传的图像/文档将在1-10个之间,并且会在一个时间点列出1000-2000个项目(如果不是更多)。

从四处查看,我认为最简单的解决方案是按项目编号命名文件夹并在MySql中列出引用。每个项目都有一个单独的项目编号,不应重复。是否有更好的文件夹管理解决方案?

3 个答案:

答案 0 :(得分:2)

正如先生所说,可以使用productid-docid-imageid-timestamp重命名图像 如果不经常检索图像,则将图像作为blob存储在db中,并且打印具有不同名称的图像可能有所帮助。

答案 1 :(得分:1)

您要小心的是,大多数文件系统都限制了文件夹中可以存储的项目数量;在Linux上,限制通常在30000左右。你提供的数字应该没有什么值得关注的,但是你仍然应该为将来的系统做好计划。

我发现通过哈希存储图像非常有用。例如,创建图像的SHA1哈希值,例如:cce7190663c547d026a6bf8fc8d2f40b3b1b9ea5。然后将图像存储在基于此哈希的目录结构中,并使用几个级别的文件夹:

cce/719/066/3c5/cce7190663c547d026a6bf8fc8d2f40b3b1b9ea5.jpg

这使用散列的前12个字符形成4级深的文件夹结构,然后文件名是整个散列。根据需要增加或减少文件夹深度。这允许您存储相当多的图像(((16 ^ 3)^ 4)*限制)而不会达到文件系统限制。然后,将此路径保存在数据库中,其中包含有关图像的其他信息及其所属的项目。此方法还可以有效地重复数据存储,您永远不会存储两次相同的图像。

答案 2 :(得分:0)

如果目录中的文件太多,文件系统性能会下降,因此常见的做法是限制任何目录中的~1,000项。

尝试在item_id(填充)周围创建目录结构,因此#1002003可能是001002003,可以在001/002 / 001002003.jpg中找到。

由于您每个项目存储多个图片,因此您可能还有一个图片,例如001/002/003 / 001002003_1.jpg。

在最终目录中使用完整ID作为项目名称(001002003.jpg,而不是003.jpg)。它会在以后派上用场。

希望有所帮助。