Cloud Storage: Simulate a File System 說明Cloud Storage如何模擬檔案儲存系統。

Cloud Storage可以讓你在雲端儲存任何類型的數據。但Cloud Storage不是檔案儲存系統,是物件儲存系統。那麼Cloud Storage是如何模擬檔案系統的呢?這篇文章教你如何使用Python和Cloud Storage API創建和操作資料夾和檔案,並將它們組織成檔案系統的結構。.


目錄


※ 長物件名稱模擬檔案結構

Cloud Storage使用平面命名空間(flat namespace),實際上是沒有資料夾概念的,可以點這裡看不同儲存方式差異,先對物件儲存方式有初步瞭解。

但透過長物件名稱(long object name)可以達到模擬檔案系統概念,如下左圖的說明,無論上傳多少檔案到Cloud Storage,所有物件都是在同一個平面,沒有資料夾階層。但在物件名稱的部分,可以接受「/」符號,因此透過符號的分隔,在Cloud Console、Cloud CLI或Client Library操作物件時,「大部分」的操作都可以像檔案儲存一樣,以資料夾結構的方式來處理物件,如下右圖的說明。

也就是說,直接把資料夾的名稱放在檔名即可產生資料夾的效果,這也衍生出一些限制,例如無法建立空資料夾,或先建立資料夾再放入物件等。


※ 唯一資源識別(URI)

Cloud Storage URI是以「gs://」再加上儲存桶名稱及物件名稱所組成,是物件的全球唯一資源識別(Unique Resource Identifier)。URI被廣泛使用在Cloud CLI指令中,例如以下物件下載指令。

gcloud storage cp gs://datafy-data/Retail-Stores.csv Retail-Stores.csv

長物件名稱裡包含資料夾路徑、URI是唯一的、且Cloud CLI提供URI萬用字元功能,這三個功能組合起來可以達到更有效率的物件操作。

使用萬用字元時,需要視在什麼環境下執行,可能需要使用單引號或雙引號括起來,以避免在該環境中無法識別萬用字元。

萬用字元除了使用在URI外,也適用本地端的檔案結構,非常方便。

gcloud storage ls gs://datafy-data
gcloud storage ls "gs://datafy-data/**"
gcloud storage ls "gs://datafy-data/**/Retail-*.csv"


※ 物件及物件的元數據(Metadata)

Cloud Storage實際是怎麼儲存物件的呢?例如下圖,在Cloud Storage裡有一個Bucket-A,儲存一個B物件,B物件會依儲存桶的位置選項,例如下圖,Bucket-A選擇Region單一指定地區,Cloud Storage會確保至少在兩個Zones完成複製(replicate),以達到不同Zone的資料重覆(redundant),確保資料不遺失。

當物件儲存在儲存桶時,會一併儲存一些Metadata資訊,但Metadata與物件本身的資料是分開儲存的,例如下圖中的B物件會附帶一些M的元數據。可以點這裡看物件的元數據操作介紹。

這也是為什麼物件儲存比檔案儲存可以附帶更多的Metadata,例如可以附帶物件的Cache-Control設定,或是自定義的Metadata設定,更多的Metadata就可以帶來更多的物件標記及操作。

留意,自定義的Metadata會有額外費用。

Cloud Storage是Google Cloud裡唯一可以全球訪問的服務(即任何區域裡的服務都可以訪問Cloud Storage裡的任一個Bucket),所以儲存桶位在不同的Region中,延遲(latency)的表現是不同的,因此在進行物件操作時,還要留意延遲的因素,例如要從太平洋的一邊讀取海洋另一邊的儲存桶時,延遲的現象必須被設計在應用程式中,以免產生物件不一致的情況。


※ 不存在移動及重命名的操作

雖然在Cloud Console、Cloud CLI或Client Library都可以對物件操作移動及重命名,但實際都是執行物件的複製及刪除動作!因此若涉及大檔案、多檔案、跨區域等的物件操作,且又有延遲的因素,執行的效能就會顯著受影響。因此,在操作物件時,一定要留意這些因素。


※ 總結

初期在使用Cloud Storage時,因為模擬檔案結構的關係,大部分使用者幾乎對物件儲存並沒有特別的差異感受,但隨著使用檔案數增加,或應用程式的場景增加,才能更清楚區別不同儲存方式的差異。

因此,在操作大檔案、多檔案、跨區域的物件或儲存桶操作時,務必仔細思考一下物件儲存的特色喔!


※ References

Folders

URI wildcards


張貼留言

0 留言

Close Menu