社交网站中存储图片的文件层次结构?

4

在一个大约有5万个用户的社交网络网站中,哪种类型的文件系统适合存储图片?

我的意思是如何创建目录?存储图片的文件夹层次结构应该是什么样的(例如按相册或按用户)。

我知道Facebook现在使用的是Haystack,但在此之前它使用简单的NFS。NFS的层次结构是什么?

1个回答

0

从文件系统的角度来看,没有一种“最佳”方法来处理这个问题--例如,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服务器上,而不是简单地跨多个目录。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接