哪种类型的文件系统有利于在大约5万用户的社交网站中存储图像?
我的意思是说如何创建目录?用于存储图像的文件夹层次结构应该是什么(例如按专辑或用户)。
我知道Facebook现在使用haystack,但在此之前它使用简单的NFS。 NFS的层次结构是什么?
答案 0 :(得分:0)
从文件系统的角度来看,没有“最佳”的方法 - 例如,NFS没有任何设置“层次结构”,而不是您在NFS共享中创建的目录。照片。
每个底层文件系统类型(不是NFS,我的意思是你将使用NFS来提供文件的服务器端文件系统)都有自己独特的性能特征,但可能所有这些都会相对较快({{1}或者至少O(1)
)查找目录中文件的方法。出于这个原因,你基本上可以做任何你想要的目录结构,并获得“不可怕”的性能。因此,您应该根据最简单的编写和维护应用程序的方式做出决定,尤其是因为您现在拥有相对较少的用户。
那就是说,如果我试图解决这个问题,并想使用一个相对简单的解决方案,我可能会给每张照片一个十六进制的长随机数(如O(log(n))
)或使用照片的校验和(例如在照片文件上运行b16eabce1f694f9bb754f3d84ba4b73e
/ md5
的输出,如md5sum
),然后将其拆分为“目录”前缀和“文件名”后缀,例如{ {1}}。选择创建拆分数量的距离将决定每个目录中最终会有多少文件。然后我将数字/校验和存储为您用来跟踪已上传照片的数据库表中的一列。
这两种方法之间的权衡主要与性能有关:创建随机数比做校验和要快得多,但校验和允许您注意到已经上传了多张相同的照片并节省了存储空间(如果这可能是常见的)在您的网站上,我不知道:-))。密码安全校验和还可以创建非常好的分布式值,因此您可以确定在一个特定目录中不会出现人为大量的照片(即使黑客知道您正在使用的校验和算法)。 / p>
如果您发现您选择的确切拆分点无法扩展,因为每个目录需要太多文件,您只需添加另一级别的目录嵌套,例如从5983392e6eaaf5fb7d7ec95357cf0480
切换到{{ 1}}。此外,如果您的单个NFS服务器不能再自行处理负载,您可以使用前缀将照片分布在多个NFS服务器上,而不是简单地跨多个目录。