用于在社交网站中存储图像的文件层次结构?
Posted
技术标签:
【中文标题】用于在社交网站中存储图像的文件层次结构?【英文标题】:File hierarchy for storing image in a social-networking website? 【发布时间】:2011-12-06 09:53:11 【问题描述】:哪种类型的文件系统有利于在大约 5 万用户的社交网络网站中存储图像?
我的意思是说如何创建目录?存储图像的文件夹的层次结构应该是什么(例如按专辑或按用户)。
我知道 Facebook 现在使用 haystack,但在此之前它使用简单的 NFS。 NFS 的层次结构是什么?
【问题讨论】:
【参考方案1】:从文件系统的角度来看,没有“最好”的方法来做到这一点——例如,NFS 没有任何设置的“层次结构”,除了您在编写文件的 NFS 共享中创建的目录照片。
每种底层文件系统类型(不是 NFS,我的意思是您将使用 NFS 提供文件的服务器端文件系统)都有其独特的性能特征,但可能所有这些类型都具有相对较快的速度(O(1)
或至少O(log(n))
) 在目录中查找文件的方式。出于这个原因,你基本上可以做任何你想要的目录结构并获得“不可怕”的性能。因此,您应该根据使编写和维护应用程序最容易的因素来做出决定,尤其是因为您现在的用户数量相对较少。
也就是说,如果我试图解决这个问题并想使用一个相对简单的解决方案,我可能会给每张照片一个十六进制的长随机数(如b16eabce1f694f9bb754f3d84ba4b73e
)或使用照片的校验和(如作为在照片文件上运行md5
/md5sum
的输出,例如5983392e6eaaf5fb7d7ec95357cf0480
),然后将其拆分为“目录”前缀和“文件名”后缀,例如5983392e6/eaaf5fb7d7ec95357cf0480.jpg
。选择创建拆分的数量将决定每个目录中最终有多少文件。然后我会将数字/校验和作为一列存储在您用来跟踪已上传照片的数据库表中。
这两种方法之间的权衡主要与性能有关:创建随机数比进行校验和快得多,但校验和可以让您注意到已上传多张同一张照片并节省存储空间(如果这可能很常见)在你的网站上,我不知道:-))。加密安全校验和还可以创建分布良好的值,因此您可以确定不会在一个特定目录中人为地获得大量照片(即使黑客知道您正在使用什么校验和算法)。
如果您发现您选择的确切拆分点由于每个目录需要太多文件而无法再扩展,您可以简单地添加另一个级别的目录嵌套,例如从5983392e6/eaaf5fb7d7ec95357cf0480.jpg
切换到5983392e6/eaaf5fb7/d7ec95357cf0480.jpg
。此外,如果您的单个 NFS 服务器无法再自行处理负载,您可以使用前缀将照片分布在多个 NFS 服务器上,而不是简单地分布在多个目录中。
【讨论】:
以上是关于用于在社交网站中存储图像的文件层次结构?的主要内容,如果未能解决你的问题,请参考以下文章