我在两台服务器上的 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 的并行请求(这些是内部服务器,尚未使用)。
如何加快速度?也许我做错了什么,有更好的方法将所有密钥放入存储桶中吗?
因为
ListObject*
在 fs 上会变成 readdirs
+ stat,所以你应该避免在 minio 上使用 listObject,也许在 db 中保留一个键列表。
https://github.com/minio/minio/issues/17472#issuecomment-1598408259