- 開(kāi)發(fā)者、客戶、用戶
- 鍵值對(duì)(Key-Value)
- 資源(Resource)
- 空間(Bucket)
- 數(shù)據(jù)處理(Fop)
- 數(shù)據(jù)處理樣式(Fop-Style)
開(kāi)發(fā)者、客戶、用戶
本文檔中會(huì)經(jīng)常提到如下幾個(gè)角色。
開(kāi)發(fā)者是云存儲(chǔ)服務(wù)的使用者,因此云存儲(chǔ)服務(wù)的客戶等同于開(kāi)發(fā)者。
用戶是開(kāi)發(fā)者所推出產(chǎn)品的直接使用者,也是云存儲(chǔ)服務(wù)的間接使用者。
鍵值對(duì)(Key-Value)
鍵值對(duì)(Key-Value,簡(jiǎn)稱KV)是一個(gè)常用的數(shù)據(jù)結(jié)構(gòu)概念,通常又被稱為字典(Dictionary)或映射(Map)。每個(gè)存放到該數(shù)據(jù)結(jié)構(gòu)中的值(Value)都對(duì)應(yīng)一個(gè)全局唯一的鍵或鍵名(Key)。該數(shù)據(jù)結(jié)構(gòu)的特征是以空間換時(shí)間,通過(guò)鍵名查詢值通常是比較快速的過(guò)程。
在存儲(chǔ)系統(tǒng)中,鍵值對(duì)和文件系統(tǒng)(File System,簡(jiǎn)稱FS)是同一個(gè)概念。在IT系統(tǒng)演進(jìn)早期,文件系統(tǒng)比較符合常規(guī)的使用場(chǎng)景,令用戶可以對(duì)大量?jī)?nèi)容進(jìn)行有效歸類管理,比如桌面操作系統(tǒng)通常會(huì)默認(rèn)創(chuàng)建圖片、視頻、文檔、下載等文件夾。但當(dāng)系統(tǒng)內(nèi)的節(jié)點(diǎn)(如文件和文件夾)數(shù)量達(dá)到某個(gè)級(jí)數(shù)后,系統(tǒng)性能將急劇下降到不可用的程度,因此文件系統(tǒng)在設(shè)計(jì)時(shí)一般會(huì)對(duì)文件夾中可包含的子節(jié)點(diǎn)數(shù)目設(shè)置一個(gè)上限。
在設(shè)計(jì)海量存儲(chǔ)系統(tǒng)時(shí),文件系統(tǒng)的兩個(gè)缺陷就會(huì)凸顯出來(lái):性能限制、無(wú)法橫向無(wú)限擴(kuò)展。在這種考慮下,海量存儲(chǔ)系統(tǒng)一般設(shè)計(jì)為鍵值對(duì)模式。鍵是對(duì)應(yīng)文件的名稱,它可以是一個(gè)任意字符串(有些設(shè)計(jì)中可能會(huì)保留一些字符),值就是一個(gè)具體文件。寫入文件時(shí),用戶可以自行指定鍵(比如看起來(lái)接近于文件系統(tǒng)的格式:data/imgs/2011/1/1/img001.jpg
),或者讓存儲(chǔ)系統(tǒng)自動(dòng)生成一個(gè)唯一的鍵并返回給上傳端。使用者只需要知道下載出口的域名,而無(wú)需了解文件具體會(huì)被存放到哪個(gè)機(jī)房的哪個(gè)設(shè)備,也無(wú)需知道具體存放形式。只需在瀏覽器輸入對(duì)應(yīng)的URL訪問(wèn)即可,如:
http://imgs.qiniu.com/data/imgs/2011/1/1/img001.jpg
資源(Resource)
資源是七牛云存儲(chǔ)服務(wù)中的邏輯存儲(chǔ)單元。對(duì)于每一個(gè)賬號(hào),該賬號(hào)里存放的每個(gè)資源都有唯一的一對(duì)空間(Bucket)與鍵(Key),作為識(shí)別標(biāo)識(shí)。
資源鍵名是一個(gè)字符串,大部分情況下接近于Linux文件路徑的風(fēng)格,比如:level1/level2/example1.jpg
。但在七牛云存儲(chǔ)中并沒(méi)有路徑的概念,因此這個(gè)鍵名并不表示目錄level1/level2/
下的一個(gè)名為example1.jpg
的文件,而是該鍵名就是這樣一個(gè)完整的字符串。因此,與Linux文件路徑不同,資源的標(biāo)識(shí)符可以包含任意字符(包括UTF-8編碼形式的Unicode字符)。
使用者可以在上傳資源時(shí)為其指定一個(gè)方便管理的鍵名,通過(guò)設(shè)計(jì)好的前綴來(lái)達(dá)到類似于文件目錄的分類和層次效果。比如對(duì)于一個(gè)網(wǎng)站的資源,我們可以用如下鍵名命名資源:
index.html
features/index.html
features/feature1.html
features/feature2.html
imgs/features/feature1.png
imgs/features/feature2.png
about.html
假設(shè)這些資源都位于某個(gè)綁定了域名example.com
的公開(kāi)空間中,則用戶可以在瀏覽器里輸入以下URL訪問(wèn)這些資源:
http://www.example.com/features/index.html
或省略掉index.html
,如下:
http://www.example.com/features/
空間(Bucket)
空間是資源的組織管理單位,一個(gè)資源必然位于某個(gè)空間中??梢詾槊總€(gè)空間設(shè)置一系列的屬性,以對(duì)資源提供合理的管理動(dòng)作。
常見(jiàn)的屬性有如下:
- 將空間設(shè)置為公開(kāi)或私有,以控制空間內(nèi)資源的訪問(wèn)權(quán)限。
- 設(shè)置資源的數(shù)據(jù)處理樣式(Style),以便于用簡(jiǎn)短方式對(duì)資源進(jìn)行處理。
數(shù)據(jù)處理(Fop)
數(shù)據(jù)處理是七牛云存儲(chǔ)提供的一種強(qiáng)大的數(shù)據(jù)處理機(jī)制。開(kāi)發(fā)者可以在上傳或訪問(wèn)資源時(shí)觸發(fā)數(shù)據(jù)處理流程,從而得到資源進(jìn)行按需變換后的結(jié)果。
數(shù)據(jù)處理的執(zhí)行非常簡(jiǎn)單,就是在資源請(qǐng)求中加上數(shù)據(jù)處理動(dòng)作和參數(shù),比如以下的URL對(duì)圖片進(jìn)行了縮放處理,就是調(diào)用了一個(gè)名為“imageView2”的數(shù)據(jù)處理操作:
http://developer.qiniu.com/resource/gogopher.jpg?imageView2/2/w/200/h/200
多個(gè)數(shù)據(jù)處理操作可以通過(guò)管道(Pipe)進(jìn)行連接,實(shí)現(xiàn)級(jí)聯(lián)操作,每一級(jí)的輸出作為下一級(jí)的輸入。比如我們可以在一次請(qǐng)求中完成先對(duì)圖片進(jìn)行縮放,然后再在圖片右下角添加一個(gè)透明圖片水印,其中縮放和添加水印分別是一個(gè)數(shù)據(jù)處理操作:
http://developer.qiniu.com/resource/gogopher.jpg?imageView2/2/w/400
|watermark/1/image/aHR0cDovL3d3dy5iMS5xaW5pdWRuLmNvbS9pbWFnZXMvbG9nby0yLnBuZw==
數(shù)據(jù)處理樣式(Fop-Style)
如果覺(jué)得url?
這種形式過(guò)于冗長(zhǎng),還可以為這些串行的
集合定義一個(gè)友好別名,之后可以用這個(gè)友好別名來(lái)取代冗長(zhǎng)的指令和參數(shù)。我們稱這個(gè)別名為數(shù)據(jù)處理樣式,它是對(duì)一個(gè)或一組數(shù)據(jù)處理操作的命名。
還以上一個(gè)數(shù)據(jù)處理的URL為例,看起來(lái)非常長(zhǎng)且難以理解。我們可以定義一個(gè)名為watermark
的數(shù)據(jù)處理樣式,對(duì)應(yīng)以上的數(shù)據(jù)處理操作:imageView2/2/w/400 |watermark/1/image/aHR0cDovL3d3dy5iMS5xaW5pdWRuLmNvbS9pbWFnZXMvbG9nby0yLnBuZw==
,則我們可以用如下方式進(jìn)行訪問(wèn):
http://developer.qiniu.com/resource/gogopher.jpg-watermark
顯然簡(jiǎn)潔很多也方便很多。
Note
上面的 ‘-’ 我們稱為數(shù)據(jù)處理樣式的分隔符。