COSMOS DB DATABASE AZURE NoSQL

azure cosmos db 初探

小馬 2020/05/28 11:58:11
182

前言:

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 的資料。

小馬