文章内容

2024/8/12 3:18:04,作 者: 黄兵

OpenStack Swift 大文件分片

OpenStack Swift 对大文件分片上传(Large Object Uploads)主要通过以下两种方式来实现:

  1. Static Large Objects (SLO)
  2. Dynamic Large Objects (DLO)

1. Static Large Objects (SLO)

SLO 通过预定义的清单文件来支持大文件的分片上传。每个分片都作为独立的对象上传,然后使用一个 JSON 清单文件将所有分片组合成一个完整的对象。

步骤

  1. 上传分片:将大文件分成多个小片段,每个片段上传为一个独立的对象。
  2. 创建清单文件:创建一个 JSON 清单文件,列出每个片段的 ETag 和路径。
  3. 上传清单文件:上传清单文件到 Swift。Swift 将根据清单文件的描述,把所有片段组合成一个完整的对象。

优点

  • 分片可以并行上传,提高上传效率。
  • 如果某个分片上传失败,只需要重新上传该分片,而不是整个文件。
  • 清单文件保存后,可以像普通对象一样访问完整文件。

缺点

  • 清单文件是静态的,所有分片的路径和 ETag 必须事先定义好,修改比较麻烦。

2. Dynamic Large Objects (DLO)

DLO 使用对象的目录结构和 Swift 的对象版本功能来支持大文件分片上传。分片对象的名字按一定规则命名,Swift 在访问大文件时,会自动拼接这些分片。

步骤

  1. 上传分片:将大文件分成多个片段,并按顺序命名,如 filename/segment1filename/segment2 等。
  2. 创建动态清单:将对象的前缀(如 filename/)作为一个特殊的“清单对象”上传。Swift 会根据这个前缀,将所有匹配的分片自动组合成一个完整的对象。

优点

  • 自动管理分片,简单灵活。
  • 分片上传后,系统自动拼接,不需要单独创建清单文件。
  • 可以动态增加或删除分片。

缺点

  • 访问完整文件时,所有分片都需要被读取,因此访问性能依赖于分片数量和大小。

总结

  • SLO 更适合需要精确控制分片和组合的场景,并且访问性能相对更高。
  • DLO 更灵活,适合动态上传和管理大文件,但在访问时性能可能不如 SLO。

对于上传特别大的文件,可以使用这些方法进行分片上传,以减少单次上传的数据量,同时避免超出单次上传的限制。


其它相关推荐:

1、Ubuntu 22.04 安装 OpenStack Swift

2、Ubuntu 22.04 安装 OpenStack Swift 存储策略

3、OpenStack Swift 自定义认证中间件

4、如何卸载 OpenStack Swift

5、OpenStack Swift 配置 Memcached

分享到:

发表评论

评论列表