海量小文件的管理

在单个目录存放超过上百万的文件时,对大部分的OS都是一个挑战,目录的浏览就是一个非常难以忍受的事情。所以针对海量小文件的应用场景,能够使用nosql数据库时,尽量使用如redis之类的nosql数据库.

在非使用文件系统来存储管理海量小文件的情况下,尽量使用以下原则来进行管理

  • 尽可能使用目录分批存储,避免单目录文件数量过万
  • 文件系统最好使用XFS,XFS的inode数量是ext4的10倍以上

如果不小心遇到了单目录下文件数量过万甚至百万的情况,下面是一些处理建议

##目录复制或者移动 将单目录为百万以上的文件分目录批量存储

首先获取一份目录文件列表,然后根据列表来使用脚本批量处理文件

find /path/ -name "*" > filelist.txt

#!/bin/sh cd _Receive for ((j=1;j<10000;j++)); do _dir=$j mkdir /u02/app/tomcat/files/temp/${_dir} for i in `head -n 10000 /u01/app/tomcat/files/flist.txt` ; do mv $i /u02/app/tomcat/files/temp/${_dir} done sed -i '1,10000d' /u01/app/tomcat/files/flist.txt done

 

## 快速删除文件

rsync -ap --delete-before /blank_dir/ /dest_dir

经测试验证,使用rsync批量删除文件效率要比直接rm快10倍以上

root# time rsync --delete-before -a b/ t
real    2m6.463s
user    0m3.150s
sys    1m2.625s


root# time find t -name "*" -exec rm {} \;
real    27m52.152s
user    4m59.824s
sys    22m50.166s

 

posted @ 2018-10-10 11:31  ^^Tom^^  阅读(959)  评论(0编辑  收藏  举报