介绍¶
从哪里开始?¶
python-swiftclient 项目包含一个命令行工具和两个独立的 API,用于以编程方式访问 swift。选择最适合给定用例的方法是用户需要解决的第一个问题。
用例¶
除了命令行工具外,python-swiftclient 还包含两层 API
一个低级客户端 API,它为各种身份验证机制和单个 HTTP 请求提供简单的 Python 包装器。
一个高级服务 API,它提供了一种在线程池上并行执行常见操作的方法。
示例用例
- 上传和检索数据
如果您只是在文件系统和文件系统之间上传和下载文件和目录,请使用命令行工具。命令行工具可以集成到 shell 脚本中以自动化任务。
- 集成到自动化的 Python 工作流中
如果您的用例需要与基于 Python 的工作流集成,请使用
SwiftServiceAPI 来执行 CLI 提供的操作。此方法对单个对象操作(例如每个对象上设置的元数据)提供更大的控制和灵活性。SwiftService类提供了一种使用可配置的共享线程池对 swift 对象存储执行多组操作的方法。SwiftService类的一个实例可以在您自己的代码中的多个线程之间共享。
- 用 Python 开发应用程序以访问 swift 对象存储
使用
SwiftServiceAPI 开发使用 swift 存储和检索对象的 Python 应用程序。SwiftService实例提供了一个可配置的线程池,用于执行 CLI 支持的所有操作。
- 对线程或正在执行的请求进行细粒度控制
如果您的用例需要对高级功能进行细粒度控制,或者您希望使用自己现有的线程模型,请使用
ConnectionAPI。需要使用ConnectionAPI 的高级功能的示例包括创建一个引用已经存在的对象的 SLO 清单,或者对每个 HTTP 请求提供的查询字符串进行细粒度控制。
重要注意事项¶
本节涵盖了一些重要的注意事项、有用的提示以及在将对象存储集成到您的工作流中时应避免的事项。
对象存储不是文件系统¶
不能过分强调您对对象存储的使用应该反映正确的用例,而不要将存储视为传统的文件系统。在设计使用对象存储的应用程序时,需要记住两个主要的限制
您无法重命名对象。由于对象名称是确定对象及其副本存储位置的因素之一,因此重命名需要将多个副本的数据在物理存储设备之间移动。如果您想重命名对象,您必须上传到新位置,或者向新位置发出服务器端复制请求,然后删除原始对象。
您无法修改对象。对象存储在多个位置,并根据上传期间计算的 MD5 和来检查其完整性。为了修改对象的内容,必须重新上传所需的所有内容。在某些特殊情况下,可以使用大对象来规避此限制,但无法提供类似文件的访问权限来修改存储的对象。
对象无法锁定¶
没有一种机制可以以原子方式组合从对象读取数据/元数据和将更新写入该数据/元数据的操作。任何有权访问容器的用户都可以随时更新与对象关联的内容或元数据。
应避免使用假设自上次读取对象以来没有进行任何更新的工作流。启用这种类型的工作流需要外部对象锁定机制和/或所有访问数据的客户端之间的协作。