我正在做一些启动的开发工作,并被要求处理所有被服务内容的目录结构以及主机服务器的可扩展性(负载平衡等)。
目前,大约有50万个文件,但预计会继续扩展,每个文件应该是唯一的,但有些文件只是同一个文件的旧版本。 所有的文件将被保存在一个SQL数据库以及更多的文件信息。 每个文件都包含一个标识,这个标识是id的,比如file.coder.project每个文件都包含一个标识,这个标识是id的修订版,例如:1或者2或者14等等
到目前为止文件已经在这个结构(string也存储在数据库):
File\coder\project\file.coder.project.rev-md5.ext
(文件编码器和项目不是字面上的段,只是一个例子)
问题是一些子文件夹会被其他人填满,我很担心跨多个服务器的复制问题。 我一直在辩论切换它削减其md5sum或沙的价值喜欢3/4水平,只是更新数据库(不是一个问题,很容易)
计划的同步过程将是lsyncd和rsync脚本,因为数据库将被复制到任何地方。
寻找其他的build议或想法,或者是md5 /沙可能更好地切割文件夹密度? 即使已经知道完整path,两种方法都会影响文件加载/读取时间吗?
所有的系统都将是Ubuntu的ext3或ext4
基于散列的文件存储方法有很多,但你必须确保将散列切割成足够大的块,以使目录不会太大。 我记得,EXT3直接在一个充满15,000个子目录的目录中打开一个特定的子目录需要比只有2,000个子目录的目录长。 不知道ext4。
由于散列的前几位数字是非常独特的,所以将散列分成5块,其中前4块是散列的3个字符,最后一块大于那个,将第一层目录保留在“非常大'尺寸。 两种EXT版本直接访问这种结构的文件应该是相当快的。