azure cosmos db 初探
前言:
Azure Cosmos DB是一款提可以使用SQL或NoSQL的查詢方式查詢,同時可以儲存多種資料,例如鍵值對、文件、圖像、串流....,且具有分散式資料庫的特性的資料庫,在世界各地都可提供穩定快速的傳輸速度,另外,目前他有提供免費的流量,也很適合當我們需要一個資料服務的時候,可以考慮的方便選擇。本文將講解基本如何創建使用Cosmos DB的服務,以及初次使用時相關問題。
Part.A 進入Azure Cosmos DB:
1、首先要有一個Azure帳號
2、登入後就可以到達Azure的首頁,在這裡可以看到目前已經訂閱的功能有哪些。
3、選擇左上[建立資源],進入新增的畫面。選擇Azure Cosmos DB開始新增。
4、訂閱選擇[免費試用版],[資源群組](註1)因為我們是新帳戶,自己取名建立一個新的,[帳戶名稱]則取一個自己可以分辨的,因為以後在管理畫面的識別就是看這個名稱,[API]則是選擇我們之後要用哪一種操作語言來操作,目前我們以SQL作為我們嘗試的語言,[Notebooks]選Off即可,[位置]因為我們是免費帳戶,所以目前有的選擇較少,如果是付費帳戶將會有更多選擇。選完後我們就可以按下[檢閱及建立]。
5、進入建立前的檢查畫面,這邊會羅列出大部份的資訊,可以按下[建立]開始啟動我們的Cosmos DB的服務。
6、按下[建立]後,進入部屬畫面,會等有些久。
Cosmos DB功能至此完成啟動。
Part.B 試用Cosmos DB:
試用的範例,我們將從建立資料庫,再到Create / Read / Update /Delete的方法,逐項以最簡單的方式進行示範。
建立資料庫
基本上我們有幾種方式建立資料庫:
a.用Core SQL API建立
b.用終端機模式建立
c.用Azure的檔案總管建立
而microsoft提供的範例檔案,已經提供了Core SQL API的操作範例,不只包括建立資料庫,實際上也包括了CRUD的動作,使用API來操作可以算是實際使用時最飯用的方法,所以我們先簡單的來看一下Core API提供的功能。
1、首先我們跟著教學,點[快速入門]直接導向到範例。我們直接選擇用Client端app的方式連線,試玩一下Cosmos DB。選擇Create "Items" container,會建立一個範例的Database跟一個範例的container,並使範例程式專案可以被下載。
2、接著我們下載範例的client端程式。
3、下載後如果你直接執行這個專案,會發現這個專案會執行到一半會有錯誤,這是因為我們在剛剛Create Item的時候已經建立了這個資料庫,所以如果要執行這個示範專案,必須要先把我們剛剛建出來的資料庫砍掉。砍掉後執行專案就會正確執行了。
4、打開範例程式我們可以看到,在APP.config有連線資訊。
5、在Program.cs裡面可以看到資料操作範例。我們可以先把最後兩行刪除的指令先屏蔽掉,方便我們後面試玩線上的操作。另外,依據方法的命名我們可以清楚看到資料庫的建立方法(CreateDatabaseAsync)、容器的建立方法(CreateContainerAsync)
6、啟動執行後,可以看到基本的執行的結果,也可以自行閱讀範例程式碼了解怎麼操作。
查詢資料庫
有數種方式可操作 Azure Cosmos DB 資料庫。 您可以使用 REST API 搭配適用於 Python、C#、Java 及 Node.js 的原生 SDK,或甚至是使用 Azure 入口網站,來達到此目的。我們在這邊先以最簡單的方式,使用Azure的資料總管來查詢操作。
1、我們回到Azure操作畫面,選擇[資料總管]。
2、資料總管提供一個一個可以查詢的環境,如我們剛剛建入的資料,我們可以直接在這邊查詢到。
3、由於我們選的是SQL的模式,所以可以用SQL語法進行查詢,但這邊的SQL語法又與我們平常用的SQL,會有一些些習慣上的不同之處。以平常的SQL來說,我們只需要使用如SELECT column FROM table的形式,除非是兩個table join在一起,才需要在SELECT的時候用tableA.column,tableB.column的形式。但是在Cosmos DB中,我們如果要查詢欄位達到像是SELECT column FROM table的效果,就必須要使用SELECT table.column FROM table或用別名SELECT a.column FROM table a的方式。
例如下圖,從SELECT * FROM c的查詢出的陣列我們可以看到陣列元素中的有屬性id,但如果我們下SELECT id FROM c,是沒辦法正確查出id的。
4、需要用SELECT c.id FROM c 才能正確查詢。
新增資料到資料庫
一樣如前面,此處亦可使用範例中的Core SQL API來新增資料,但我們在這邊先示範如何使用資料總管的功能來實作。
1、如果我們要在資料總管進行Insert的動作,首先選取New Item按鈕,進行新增的動作。
2、接著我們貼入下面這段資料進行新增。
3、接著我們按下Save
4、我們可以看到資料順利的新增進入資料庫,左側可以看到我們剛剛新增的Sean.3,右側可以看到系統自動新增的資料。
修改資料
接下來,我們嘗試修改剛剛新增的這筆資料,我們直接對json進行操作,我們直接在原來的json裡面添加一段MyParents的部分,然後按下Update,就順利的更新了原來的資料。
刪除資料
1、我們也可以透過介面的Delete,直接進行刪除資料。
2、刪除後可以看到我們刪除的資料已經從資料列消失了。
本次試用Cosmos DB利用Azure的資料總管進行CRUD操作,至於實際使用上,使用Core SQL API進行操作可能是更常使用的方法。而API的呼叫方法與範例,在官方提供的Sample中有完整的C#.NET core程式碼可以參考。有任何使用問題歡迎在留言討論。
Part.C 使用Cosmos DB的費用問題:
Cosmos DB的收費,基本上是依照所需的RU/s(註3、註4),根據部建的量來進行收費,目前新帳號,有400RU的輸送量、5GB的容量可以用。
在Cosmos DB操作畫面,使用查詢後,也可以看到該次查詢需要多少RU,藉以判斷需要的資源量。
另外可以透過[監視] >> [計量] >> [概觀],來了解大約的使用量
以上方法,可以讓我們大約知道我們有多少資源可以使用,或如果要購買服務,需要購買多少份額才夠使用。
小結:
本次我們講完了基本使用開啟Azure Cosmos DB相關功能的方式,下次我們將運用此服務來串接其他服務,來更深入的試用Azure Cosmos DB的功能。
註釋:
1、資源群組:
是存放 Azure 方案相關資源的容器。 資源群組可以包含方案的所有資源,或只包含您要以群組方式管理的資源。 您可決定如何根據對組織最有利的方式,將資源配置到資源群組。 一般而言,會新增共用相同生命週期的資源到相同資源群組,因此您可以以群組為單位輕鬆地部署、更新、刪除它們。資源群組會儲存資源相關中繼資料。 因此,當您指定資源群組的位置時,您便是指定中繼資料的儲存位置。 基於相容性理由,您可能需要確保您的資料存放在特定區域中
2、API選擇操作語言目前有:
核心(SQL)、適用於Mongo DB API的Cosmos DB、Cassandra、Azure 資料表、Gremlin (圖表)...等方法。
3、在Cosmos DB中,分為兩個部分要收取費用,其一是輸送資料時的傳送量,另一是資料的儲存。對於輸送資料,在Azure Cosmos DB 會針對佈建的輸送量及該小時取用的儲存體收費。佈建的輸送量呈現方式為每秒的要求單位 (RU/秒),可用於各種資料庫作業 (例如:插入、讀取、取代、upsert、刪除、查詢等)。舉例來說,1 RU/秒足以處理 1000 個項目的一個最終一致每秒讀取,5 RU/秒則足以處理 1000 個項目的每秒一個寫入。對於儲存資料,儲存體的收費對象為 SSD 資料及索引的每 GB 使用量。
4、讀取 1 KB 項目的成本是 1 個要求單位 (即 1 RU)。 至少需要 10 RU/秒,才能儲存每 1 GB 的資料。