如何在Google云端存储中连接一百万个文件

d-_*_*_-b 3 google-app-engine google-cloud-storage

根据Google云端存储的文档,使用时存在一些限制gsutil compose(见下文).

是否有更有效的方法将大量文件组合在同一个存储桶中(约1百万)?

如果我理解正确,我将不得不加入32人小组,然后继续这样做并再次加入?

请注意,在单个操作中可以组成的组件数量存在限制(当前为32).

给定复合对象的组件总数存在限制(当前为1024).这意味着您最多可以追加1023次每个对象.

每个项目的速率限制(目前为200)与每秒可以组成的组件数量有关.此速率计算附加到复合对象的组件以及复制它们所属的复合对象时要复制的组件.

Mik*_*ett 7

GCS 不再强制执行组件计数限制。只要新创建的对象 <= 5 TiB,您就可以合并 100 万个文件。您仍然必须通过递归组合以 32 个为一组加入文件,如此处所述

串行执行此操作的一种简单方法是通过重复覆盖将其附加到单个对象。例如:

  1. 将文件上传为对象 {F i , F i+1 , ... F total }
  2. 组合对象 {F 1 , F 2 , ... F 31 } 以创建组合对象 X
  3. 递归组合对象 {X, F i+1 , F i+2 , ... F i+30 } 用新对象覆盖 X

由于每个项目的组合速率限制也已取消,您也可以通过批量组合临时对象,然后删除临时对象来并行执行此操作。

  1. 组合对象 {F i , F i+1 , ... F i+31 } 以创建组合对象 X (1) i / 32
  2. 递归组合对象 {X (m) j , X (m) j+1 , ... X (m) j+31 } 以创建复合对象 X (m+1) j / 32
  3. 删除所有临时对象 X (m) j

唯一的警告是componentCount元数据属性在 2,147,483,647 处饱和,即使对象具有 > 2,147,483,647 个组件。如果您不依赖于componentCount准确,那么这应该不是问题,因为componentCount不会影响 compose 是否成功。


Bra*_*ugh 6

不幸的是,由于"总计"组件限制为1024,因此无法一次又一次地组合32个组.

相反,你需要做的是:

  1. 让我们命名一百万个原始文件A(~1,000,000个对象).
  2. 在A中的每组32个对象上调用comp,生成集合B(~30,000个对象).B中的每个对象的组件数为32.
  3. 对B中每组32个对象的组进行调用,生成集合C(~1000个对象).这些新对象每个都有32*32个组件,或1024.这正是限制.您不能再直接撰写它们.
  4. 在C的每个元素上调用"rewrite".这会将组件计数重置为1.
  5. 在C中对每组32个元素进行调用,产生集合D(~30个对象).
  6. 调用compose一次组合所有D.

大部分工作可以并行完成,这将大大加快速度.

  • 也许您应该提到在同一位置或存储类中“重写”不会重置组件数。不幸的是,对于某些本来应该是相当简单的操作,却需要一种真正的技巧。 (2认同)