如何在多文件夹的大体积Zip日志文件中高效搜索5万条名称?
批量搜索海量Zip日志文件的高效优化方案
兄弟,你这个场景确实挺磨人的——手里握着50000条名称的列表,要在分散在不同文件夹、总容量高达450GB的大量Zip压缩包(每个Zip里还套着多个日志文件)里做匹配搜索,目前用的逐个遍历文件夹、Zip包的脚本,效率肯定低到让人头疼吧?先把你给出的现有脚本片段整理下:
cd /disk1/ABCDEFArchive/ while read pl; do echo Searching $pl for i in 3 3-AB 3-CD 3-EF 4 4-AB 4-CD 4-EF 5 5-AB 5-CD 5-EF do cd web$i for j in 2017-09 2017-10 2017-11 2017-12 2017-01 2017-02 do # 这里应该是你遍历Zip文件并逐行搜索的逻辑 ... cd .. # 别忘了回退路径,不然会越跑越偏 done done done < your_name_list.txt # 假设你的名称列表存在这个文件里
这种“先循环每个名称,再扫遍所有Zip”的逻辑,最大的问题是重复打开/读取Zip包上万次,完全是在做无用功,而且单线程跑450GB的数据,耗时估计按天算都有可能。给你几个针对性的优化方向:
1. 反转逻辑:一次扫Zip,批量匹配所有名称
别再围着单个名称转了,反过来——遍历一次所有Zip包,用你的5万条名称做批量匹配,这样每个Zip只需要被读取一次,效率直接拉满。可以用zgrep(支持直接读取Zip内文本的工具)配合-f参数实现:
# 先把固定参数定义好,方便维护 WEB_FOLDERS="3 3-AB 3-CD 3-EF 4 4-AB 4-CD 4-EF 5 5-AB 5-CD 5-EF" DATE_FOLDERS="2017-09 2017-10 2017-11 2017-12 2017-01 2017-02" NAME_LIST="/path/to/your_50000_names.txt" OUTPUT_FILE="/disk1/search_results.txt" cd /disk1/ABCDEFArchive/ for folder in $WEB_FOLDERS; do cd "web$folder" for date_dir in $DATE_FOLDERS; do cd "$date_dir" # 用zgrep一次性匹配所有名称,直接读取Zip内的日志 zgrep -f "$NAME_LIST" --include="*.zip" ./*.zip >> "$OUTPUT_FILE" cd .. done cd .. done
zgrep不需要手动解压Zip,直接读取内部文本,省空间又省时间-f参数指定包含所有搜索关键词的文件,一次性完成批量匹配,不用循环5万次
2. 多线程并行:榨干CPU性能
单线程跑这么大的数据量太浪费资源了,用parallel或者xargs实现多线程并行扫描,充分利用服务器的CPU核心:
NAME_LIST="/path/to/your_50000_names.txt" OUTPUT_FILE="/disk1/search_results.txt" THREAD_NUM=8 # 根据你的CPU核心数调整,比如8核就设8,16核设16 # 先找出所有符合条件的Zip文件,然后并行处理 find /disk1/ABCDEFArchive/ -name "*.zip" \ -path "*web[3-5]*" \ -path "*2017-*" | \ parallel -j $THREAD_NUM "zgrep -f $NAME_LIST {} >> $OUTPUT_FILE"
find命令精准筛选出需要搜索的Zip文件,避免无效扫描-j $THREAD_NUM指定并行线程数,一般设为CPU核心数的1-2倍最合适
3. 长期优化:建立全文索引(可选)
如果以后还要多次做类似的搜索,不如一次性把所有Zip解压到统一目录,然后用工具建立全文索引(比如elasticsearch或者grep的索引工具),后续搜索直接查索引,速度会快到飞起。当然这个方案需要额外的磁盘空间(至少450GB),适合长期重复搜索的场景。
最后给你几个小提醒:
- 有些系统的
zgrep可能不支持Zip格式,需要先安装zipgrep包(比如apt install zipgrep或者yum install zipgrep) - 搜索结果会非常大,一定要用
>>追加到文件,别直接输出到终端 - 先拿一小部分名称和几个Zip包做测试,验证脚本逻辑没问题再跑全量,避免白跑半天
内容的提问来源于stack exchange,提问作者Faizan Younus
相关产品推荐
相关产品推荐

