讓您全面了解并上手億速云產品
常見入門級使用教程
對外 API 開發文檔中心
您歷史提交的工單
您的每一條意見,我們都嚴謹處理
您的每一條建議,我們都認真對待
本文將向您介紹對象存儲OSS產品中涉及的幾個基本概念,以便于您更好地理解OSS產品。
存儲空間是用戶用于存儲對象(Object)的容器,所有的對象都必須隸屬于某個存儲空間。存儲空間具有各種配置屬性,包括地域、訪問權限、存儲類型等。用戶可以根據實際需求,創建不同類型的存儲空間來存儲不同的數據。
存儲空間的命名規范如下:
對象是OSS存儲數據的基本單元,也被稱為OSS的文件。和傳統的文件系統不同,對象沒有文件目錄層級結構的關系。對象由元信息(Object Meta),用戶數據(Data)和文件名(Key)組成,并且由存儲空間內部唯一的Key來標識。對象元信息是一組鍵值對,表示了對象的一些屬性,比如最后修改時間、大小等信息,同時用戶也可以在元信息中存儲一些自定義的信息。
對象的生命周期是從上傳成功到被刪除為止。在整個生命周期內,除通過追加方式上傳的Object可以通過繼續追加上傳寫入數據外,其他方式上傳的Object內容無法編輯,您可以通過重復上傳同名的對象來覆蓋之前的對象。
對象的命名規范如下:
說明 對象名稱需要區分大小寫。如無特殊說明,本文檔中的對象、文件稱謂等同于Object。
在各語言SDK中,ObjectKey、Key以及ObjectName是同一概念,均表示對Object執行相關操作時需要填寫的Object名稱。例如向某一存儲空間上傳Object時,ObjectKey表示上傳的Object所在存儲空間的完整名稱,即包含文件后綴在內的完整路徑,如填寫為abc/efg/123.jpg。
Region表示OSS的數據中心所在物理位置。用戶可以根據費用、請求來源等選擇合適的地域創建Bucket。一般來說,距離用戶更近的Region訪問速度更快。詳情請參見OSS已經開通的Region。
Region是在創建Bucket的時候指定的,一旦指定之后就不允許更改。該Bucket下所有的Object都存儲在對應的數據中心,目前不支持Object級別的Region設置。
Object操作在OSS上具有原子性,操作要么成功要么失敗,不會存在有中間狀態的Object。OSS保證用戶一旦上傳完成之后讀到的Object是完整的,OSS不會返回給用戶一個部分上傳成功的Object。
Object操作在OSS同樣具有強一致性,用戶一旦收到了一個上傳(PUT)成功的響應,該上傳的Object就已經立即可讀,并且Object的冗余數據已經寫成功。不存在一種上傳的中間狀態,即read-after-write卻無法讀取到數據。對于刪除操作也是一樣的,用戶刪除指定的Object成功之后,該Object立即變為不存在。
Endpoint表示OSS對外服務的訪問域名。OSS以HTTP RESTful API的形式對外提供服務,當訪問不同的Region的時候,需要不同的域名。通過內網和外網訪問同一個Region所需要的Endpoint也是不同的。例如杭州Region的外網Endpoint是oss-cn-hangzhou.aliyuncs.com,內網Endpoint是oss-cn-hangzhou-internal.aliyuncs.com。具體的內容請參見各個Region對應的Endpoint。
OSS使用基于糾刪碼、多副本的數據冗余存儲機制,將每個對象的不同冗余存儲在同一個區域內多個設施的多個設備上,確保硬件失效時的數據持久性和可用性。
對比項 | OSS | 文件系統 |
---|---|---|
數據模型 | OSS是一個分布式的對象存儲服務,提供的是一個Key-Value對形式的對象存儲服務。 | 文件系統是一種典型的樹狀索引結構。 |
數據獲取 | 根據Object的名稱(Key)唯一的獲取該Object的內容。雖然用戶可以使用類似test1/test.jpg的名字,但是這并不表示用戶的Object是保存在test1目錄下面的。對于OSS來說,test1/test.jpg僅僅只是一個字符串,和a.jpg這種并沒有本質的區別。因此不同名稱的Object之間的訪問消耗的資源是類似的。 | 一個名為test1/test.jpg的文件,訪問過程需要先訪問到test1這個目錄,然后再在該目錄下查找名為test.jpg的文件。 |
優勢 | 支持海量的用戶并發訪問。 | 支持文件的修改,比如修改指定偏移位置的內容、截斷文件尾部等。也支持文件夾的操作,比如重命名目錄、刪除目錄、移動目錄等非常容易。 |
劣勢 | OSS保存的Object不支持修改(追加寫Object需要調用特定的接口,生成的Object也和正常上傳的Object類型上有差別)。用戶哪怕是僅僅需要修改一個字節也需要重新上傳整個Object。OSS可以通過一些操作來模擬類似文件夾的功能,但是代價非常昂貴。比如重命名目錄,希望將test1目錄重命名成test2,那么OSS的實際操作是將所有以test1/開頭的Object都重新復制成以test2/開頭的Object,這是一個非常消耗資源的操作。因此在使用OSS的時候要盡量避免類似的操作。 | 受限于單個設備的性能。訪問越深的目錄消耗的資源也越大,操作擁有很多文件的目錄也會非常慢。 |
因此,將OSS映射為文件系統是非常低效的,也是不建議的做法。如果一定要掛載成文件系統的話,建議盡量只做寫新文件、刪除文件、讀取文件這幾種操作。使用OSS應該充分發揮其優點,即海量數據處理能力,優先用來存儲海量的非結構化數據,比如圖片、視頻、文檔等。
以下是OSS與文件系統的概念對比:
對象存儲 OSS | 文件系統 |
---|---|
Object | 文件 |
Bucket | 主目錄 |
Region | 無 |
Endpoint | 無 |
AccessKey | 無 |
無 | 多級目錄 |
GetService | 獲取主目錄列表 |
GetBucket | 獲取文件列表 |
PutObject | 寫文件 |
AppendObject | 追加寫文件 |
GetObject | 讀文件 |
DeleteObject | 刪除文件 |
無 | 修改文件內容 |
CopyObject (目的和源相同) | 修改文件屬性 |
CopyObject | 復制文件 |
無 | 重命名文件 |
英文 | 中文 |
---|---|
Bucket | 存儲空間 |
Object | 對象或者文件 |
Endpoint | OSS 訪問域名 |
Region | 地域或者數據中心 |
Put Object | 簡單上傳 |
Post Object | 表單上傳 |
Multipart Upload | 分片上傳 |
Append Object | 追加上傳 |
Get Object | 簡單下載 |
Callback | 回調 |
Object Meta | 文件元信息。用來描述文件信息,例如長度,類型等 |
Data | 文件數據 |
Key | 文件名 |
ACL (Access Control List) | 存儲空間或者文件的權限 |
說明 如果沒有特殊說明,本文中出現和術語表中相同的英文和中文,表達的是相同的意思。有時候為了表述方便會混合使用。