我们在Ubuntu 14.04机器上有3个文件夹,每个文件夹中包含250K图片,每个文件夹的大小为2KB-30KB,预计每个目录的文件增长到1M。
在试图将应用扩展到多个服务器时,我们正在研究Glusterfs的共享存储。 由于250K文件在ext4上不是问题,所以对于glusterfs似乎是个问题。 试图复制文件完全崩溃的机器。
我期待在两个层次上将文件分割成目录:
mkdir -p {000..255} / {000..255}
/000/000/filename /001/000/filename /001/001/filename ...
这听起来像是一个很好的方式吗? 整个结构将包含数以百万计的文件。 这将使glusterfs在生产中可靠地生产,性能良好,可承载数百万个文件?
使用GlusterFS来存储和访问很多非常小的文件是许多实现面临的难题,而且似乎你已经在解决这个问题的一条好path上:将文件分解成单独的目录。
你可以实现这样的解决scheme。 只需创build一堆目录,select每个目录中可以放置多less个文件的限制,并且希望不要用完放置文件的地方。 在你的例子中,你正在创build65k +目录,所以这不太可能是一个问题。
另一种select是根据创build文件的date创build目录。 例如,如果文件cust_logo_xad.png是今天创build的,它将被存储在这里:
/gluster/files/2015/08/24/cust_logo_xad.png
如果您为不同实体(客户,部门等)托pipe数据,则可以根据所有权分离文件,为实体分配某种唯一的ID。 例如:
/gluster/files/ry/ry7eg4k/cust_logo_xad.png
除此之外,最好看一下GlusterFS文档来调整托pipe小文件的存储群集。 至less要确保:
mkfs选项) 如果你可以的话(如果你还没有的话),创build一个数据库作为文件的索引是一个好主意,而不是必须一直扫描(例如ls )或者search(例如find )文件。