minio 中的 list_objects_v2 非常慢

问题描述 投票:0回答:1

我在两台服务器上的 docker 中使用最新的 minio。一个在我的本地网络中,另一个在远程服务器上。配置为默认,卷位于 HDD,而不是 SSD。

存储桶包含大约 400k 对象,约 70 GB。

我有以下代码(使用最新的boto3):

        paginator = s3_client.get_paginator('list_objects_v2')
        page_iterator = paginator.paginate(Bucket=bucket_name)

        for page in page_iterator:
            keys = [obj['Key'] for obj in page.get('Contents', [])]
            ...

在两台服务器上的大多数(但不是 100%)情况下,每次迭代都非常慢,迭代超过 400k 的对象可能需要几个小时。有时效果很好。

另一方面,PUT/HEAD 非常快,所以我不认为这是磁盘问题(特别是在具有不同硬件的两个不同服务器上)。 CPU/RAM 负载低。绝对没有其他对 minio 的并行请求(这些是内部服务器,尚未使用)。

如何加快速度?也许我做错了什么,有更好的方法将所有密钥放入存储桶中吗?

python amazon-web-services amazon-s3 boto3 minio
1个回答
0
投票

因为

ListObject*
在 fs 上会变成
readdirs
+ stat,所以你应该避免在 minio 上使用 listObject,也许在 db 中保留一个键列表。

https://github.com/minio/minio/issues/17472#issuecomment-1598408259

© www.soinside.com 2019 - 2024. All rights reserved.