应用场景
OOS按照对文件(Object)名的UTF-8编码范围来进行分区管理,对系统进行水平扩展与动态负载均衡。如果您上传大量文件(Object)时,使用了顺序前缀(如时间戳或字母顺序)命名,请求次数过多时,可能会出现大量文件索引集中存储于存储桶(Bucket)中的某个特定分区的情况,从而导致请求速率下降。在这种情况下,建议您为文件名称增加随机前缀。
前提条件
开通对象存储(经典版)Ⅰ型服务。
具体操作
下面是将顺序前缀修改为随机前缀的示例。
-
向文件名添加十六进制哈希前缀。
如果上传日志相关文件时,文件名包含顺序时间戳前缀:
testbucket/log/UTC2023-06-26-09-30-00_1 testbucket/log/UTC2023-06-26-09-30-00_2 testbucket/log/UTC2023-06-26-09-30-00_3 ... testbucket/log/UTC2023-06-26-09-30-00_10 testbucket/log/UTC2023-06-26-09-30-00_11 testbucket/log/UTC2023-06-26-09-30-00_12 ...
您可以对文件名计算哈希(即MD5),并取若干字符的哈希前缀作为文件名的前缀。假如取4个字符的哈希前缀:
testbucket/fe0f-log/UTC2023-06-26-09-30-00_1 testbucket/9c55-log/UTC2023-06-26-09-30-00_2 testbucket/ace3-log/UTC2023-06-26-09-30-00_3 ... testbucket/b592-log/UTC2023-06-26-09-30-00_10 testbucket/8d25-log/UTC2023-06-26-09-30-00_11 testbucket/26c2-log/UTC2023-06-26-09-30-00_12 ...
-
反转文件名
如果您使用了毫秒精度的Unix时间戳生成文件名,也属于顺序前缀:
testbucket/1688103511807.log testbucket/1688103511809.log testbucket/1688103557807.log testbucket/1688103561023.log ... testbucket/1688103591390.log testbucket/1688103610021.log testbucket/1688103630994.log …
这种情况可以考虑通过反转时间戳前缀来避免文件名包含顺序前缀,反转后结果如下:
testbucket/7081153018861.log testbucket/9081153018861.log testbucket/7087553018861.log testbucket/3201653018861.log ... testbucket/5931953018861.log testbucket/1200163018861.log testbucket/4990353018861.log ...