我有一个命令:
s5cmd --endpoint-url http://192.168.1.40:9000 ls "s3://ccdata/minhash/20*/**" | awk '{print $NF}' > minhash_listings.txt
我有一个本地 Minio 部署,到目前为止,其中有 16-1700 万个文件。 minhash的文件夹结构有84个子文件夹,其下有5000个子文件夹,每个文件夹下最多有15个文件。一个例子是 /minhash/2014-01/0001/filename.json.gz
底层硬件是 Dell R370,配有 40 个 16TB 驱动器和 3 个在 zfs 池上保存元数据的 NVME 驱动器。
此命令大约需要 3 天才能完成。当它运行时,我没有看到对网络、CPU、内存、磁盘 IO 产生任何真正的影响。这让我认为整个命令是单线程的。
我的问题是,鉴于我正在尝试创建的内容,是否有更好/更快的方法?我需要每天重新生成这个文件。
Minio CLI stat 命令:Minio CLI 提供了 stat 命令,可以检索存储桶统计信息,包括对象数量。您可以使用它来获取大致的文件计数,而无需单独列出每个文件。 Minio Python SDK:Minio Python SDK 提供了诸如 list_objects 之类的方法,允许使用过滤选项列出对象。您可以按前缀过滤以仅列出“s3://ccdata/minhash/20*”文件夹结构中的对象,从而减少检索到的对象数量。 3.优化命令结构:
减少 awk 使用:awk 命令可能会增加一些开销。考虑修改 s5cmd 命令以直接输出文件名部分(使用 --csv 或自定义格式等选项),而不是通过 awk 进行管道传输。 4.Minio 服务器端过滤(如果支持):
Minio 生命周期规则:如果您的 Minio 服务器支持生命周期规则,您可以配置一条规则来自动生成包含 minhash 文件列表的每日清单文件。这将完全不需要运行 s5cmd 命令。