iT邦幫忙

2022 iThome 鐵人賽

DAY 22
0
IT管理

Azure開發者必備掌握的基本系列 第 22

Azure開發者必備掌握的基本_第22天_Azure Cosmos DB

  • 分享至 

  • xImage
  •  

https://ithelp.ithome.com.tw/upload/images/20221010/20107452iWJc4d5nNk.png

Azure Cosmos DB

  1. 文檔數據庫的演變
  2. 一種No SQL的實踐
  3. 一個全球分佈的數據庫
  4. 支持多種數據模型,包括鍵值、列族、文件、圖表
  5. 按需彈性擴展吞吐量和存儲
  6. 構建高響應和關鍵任務應用程序
  7. 擁有成本低
    https://ithelp.ithome.com.tw/upload/images/20221004/20107452PMqWTr5xoR.png

Cosmos DB Database Engine
•Cosmos 數據庫引擎基於atom record sequence (ARS)
•Atoms Primitive types e.g. string, bool, number etc.
•Records structs
•Sequences Arrays of atoms, records or sequences.

Cosmos 數據庫引擎能夠高效地翻譯和投影數據模型放到基於 ARS 的數據模型上
•從動態類型的編程語言和本地訪問可以使用 JSON 或其他類似表示按原樣公開
•原生支持流行的數據庫 API,用於數據訪問和查詢

https://ithelp.ithome.com.tw/upload/images/20221004/20107452FldTPXo6CS.png
Azure Cosmos DB APIs Support
•SQL API (Document DB)
•Mongo DB API
•Azure Tables API
•Graph ( API
•Cassandra API

Cosmos DB Partitioning: Horizontal Partitioning
所有資源水平分區
在租戶級別實施(集合,圖表)
資源分區一致,高可用且受資源管理。
https://ithelp.ithome.com.tw/upload/images/20221004/20107452Bdcy6mZPTr.png

Cosmos DB Partitioning: Global Distribution
•所有資源垂直分佈
•分佈可以在一個集群內,數據中心和區域
https://ithelp.ithome.com.tw/upload/images/20221004/20107452CksaUDkLlH.png

Cosmos DB 和其他DB種類比較

https://ithelp.ithome.com.tw/upload/images/20221004/20107452zmmOD9XRBZ.png

Cosmos DB RU (Request per Unit)
•1 RU = Read 1 KB Item with 10 Unique Properties
•The combination of %Memory / %CPU /% IOPS
•Calculated by Azure ML
•RU Calculator : https://jlik.me/ckv

https://ithelp.ithome.com.tw/upload/images/20221004/20107452aSbTHaDca7.png

Cosmos DB Scaling
• Scale Up/Down – Increase/Decrease the number of RUs
• Scale Out/In – Increase/Decrease the number of partitions for your collections/graphs/tables
https://ithelp.ithome.com.tw/upload/images/20221004/20107452Aqq095YKYd.png

新建一個CosmosDB
https://ithelp.ithome.com.tw/upload/images/20221010/201074523QoCdLdHwL.png

當我們創建一個新的CosmosDB時, 首先要做的是選擇我們要使用的API。
https://ithelp.ithome.com.tw/upload/images/20221010/201074522K5dBcSblP.png

我們有SQL API、 MongoDB API、 Cassandra、 Azure Table和Gremlin API

在此選核心SQL API
https://ithelp.ithome.com.tw/upload/images/20221010/20107452JvVikPL9x8.png

現在我們需要選擇數據庫的容量模式。我們將選擇已調配(佈建型)的DB而不是無伺服器類
Apply free tier discount 這邊也要記得套用,以便為這些客戶應用免費層折扣。
Limit account total delivery此復選框限制了可在此帳戶上調配的總吞吐量避免額外免費額度支出。
雖然這看起來是個好主意, 但在此先暫時將其取消勾選, 因為此限制可能會在以後部署數據庫和容器時導致許多問題。

再來切至網路頁籤
在此可定義網路連接的方法
可以選擇可以連接才能的特定網絡,也可以將數據庫配置為只有專用的endpoint輸入可連接到它。

https://ithelp.ithome.com.tw/upload/images/20221010/20107452w886JfINzI.png

讓我們看一下備份策略。
Cosmos帳戶的默認備份
備份每240分鐘執行一次,數據的保留期為8小時
https://ithelp.ithome.com.tw/upload/images/20221010/20107452J2FK7DpEU1.png

在此執行創建
https://ithelp.ithome.com.tw/upload/images/20221010/20107452gUN7mPGUjP.png

https://ithelp.ithome.com.tw/upload/images/20221010/20107452c9FNRsiHrP.png

當創建好可觀察到讀寫各自區分出兩個區域
我們可以定義多區域部署,這意味著寫入一個區域,也可以在另一個區域讀取。
在目前實作則是都在相同位置。
https://ithelp.ithome.com.tw/upload/images/20221010/20107452YfFOSByxy6.png

我們選擇了免費,這意味著我們將免費享受折扣,並調配容量模式

讓我們看一下網路設置目前默認沒有特別設置網路訪問限制區段
默認情況下,任何人都可以連接到數據庫。
https://ithelp.ithome.com.tw/upload/images/20221010/20107452kNsJ6JDqVi.png

若要設置當然也可以,如果您在“選定的網絡”中點擊此處,
則可以定義哪些IP地址可以連接到cosmos,從而提供額外的保護。
https://ithelp.ithome.com.tw/upload/images/20221010/20107452k1WhzM5FBq.png

這裡就先暫時跳過此部分

開始要來創建
Azul Cosmos DB帳戶
記住一個層級關係
在帳戶下,我們有資料庫,在資料庫下,有容器。

點左側的【資料總管(Data Explorer)】
https://ithelp.ithome.com.tw/upload/images/20221010/20107452sr0nlpryuy.png

首先在創建容器時,系統會要求您選擇容器所在的DB。
因此,讓我們為DB進行命名。並確保選中了“創建新的”選項。
並將吞吐量改為手動,選擇默認指定的400 RUS(這是可能是最低門檻)
定義這個容器的名稱, 命名為orders。
將索引設置為自動。
https://ithelp.ithome.com.tw/upload/images/20221010/201074521EfwGX2jHs.png

現在我們將定義分區鍵
分區鍵(Partition Key)是實體的一個或屬性,它允許我們能均匀地在數據庫中分發實體。
因此我們將選擇優先級, 因為任何項目都有優先級, 我們假設優先級在不同產品之間變化相當均勻。
https://ithelp.ithome.com.tw/upload/images/20221010/20107452zKQSzS3dWI.png

現在, 我們正在創建一個新的DB和一個新的容器。
https://ithelp.ithome.com.tw/upload/images/20221010/20107452QpMkjhPRlm.png

當我們的DB和容器準備就緒。

現在您可以看到容器, 該容器的名稱為orders, 正如我們定義的那樣。
如果你打開這個容器, 你可以看到裡面的東西。
單擊“items”, 現在我們可以將項目添加到容器中。

https://ithelp.ithome.com.tw/upload/images/20221010/20107452orMaTirxkY.png

將如下JSON的小型範本內容粘貼到此頁輸入框
https://ithelp.ithome.com.tw/upload/images/20221010/20107452qr0m8tQ5f2.png

JSON輸入範本

{
    "orderId": "54",
    "orderDate": "01/09/2020 17:34:02",
    "total": 98.97,
    "priority": 2,
    "items": [
        {
            "name": "Harry Potter",
            "id": "443",
            "price": 55
        },
        {
            "name": "Exhalation",
            "id": "87",
            "price": 43.97
        }
    ]
}

然後單擊“保存”, 它就被添加到了Cosmos中。
https://ithelp.ithome.com.tw/upload/images/20221010/20107452ScR9g0RbVH.png
在這個容器的項目列表中有一個項目, 你在這裡看到的是保存在cosmos中的項目。

正如您所看到的, Cosmos向此項添加了各種字段,
因此, 除了我們在此處複製的字段之外,我們希望處理其他一些字段,
這些字段可以幫助Cosmos管理此項的附件和索引。

在此額外添加第二個JSON Item

{
    "orderId": "55",
    "orderDate": "01/08/2020 17:34:02",
    "total": 44.23,
    "priority": 1,
    "items": [
        {
            "name": "Rama II",
            "id": "76",
            "price": 44.23
        }
    ]
}

https://ithelp.ithome.com.tw/upload/images/20221010/20107452iOLpHETTwM.png

現在我們有兩個項目, 可以在這裡看到它們。
正如你所看到的, 它們也有不同的優先級。第一個的優先級為2, 第二個的優先級為1。
正如在我們粘貼到這裡的JSON中看到的內容一樣。

單擊此處的新的SQL查詢按鈕,
編寫以下查詢, 並單擊執行查詢。
SELECT * FROM orders
https://ithelp.ithome.com.tw/upload/images/20221010/201074521rNf2O9Nks.png

SELECT * FROM orders o where o.total>90
https://ithelp.ithome.com.tw/upload/images/20221010/201074524o1q0of8D9.png

正如您所看到的, 我們使用SQL語法來查詢Cosmos中的項目, 儘管這不是一個關係型DB。

https://ithelp.ithome.com.tw/upload/images/20221010/20107452h6da52tkKi.png

這次我們只要求檢索訂單ID
因此, 我們在這裡看不到整個JSON文檔, 而只看到了orderId字段, 因為這也是我們所要求的。

讓我們做一些更複雜的事情
https://ithelp.ithome.com.tw/upload/images/20221011/20107452se8MNl6QIH.png

SELECT * FROM orders o 
where exists (
    select value n
    from n in o.items
    where n.name='Rama II'
)

從此可觀察到json特性
以及即便非關聯性質仍可使用SQL操作

這邊若要更新json某筆資料的屬性值
比方1/9改為1/8

https://ithelp.ithome.com.tw/upload/images/20221011/20107452b8s6sVtfvg.png

點"更新"即可
https://ithelp.ithome.com.tw/upload/images/20221011/2010745247cVwMuFOy.png

實際上不僅可以更改字段的內容, 還可以更改字段的名稱。
例如, 更改訂單日期字段, 使其僅命名為date, 如下所示。

https://ithelp.ithome.com.tw/upload/images/20221011/20107452QGIZHb6QBi.png

這種操作在NoSQL資料庫是完全合法的
如果還記得的話, 我們定義了DB的分區鍵(Partition Key)基於優先級字段。
若改變這個優先級的名稱會發生捨麼事情?
https://ithelp.ithome.com.tw/upload/images/20221011/20107452L0WkyBktBY.png
例如,我們將其命名為priority1。
當執行更新會報警示錯誤
告訴我們, 我們不能修改這個字段的名稱, 因為它是由分區機制使用的。
https://ithelp.ithome.com.tw/upload/images/20221011/20107452gSVayfnGK0.png

接著可跳至索引鍵(Index Keys)
基本上包含連接Cosmos的連接字符串。
https://ithelp.ithome.com.tw/upload/images/20221011/20107452WiL4Ylg0CU.png

在此觀察到有兩個COnnection String
之所以有兩個是因為如果我們要替換一個鍵, 我們可以移動我們所做的,
可以移動到使用次鍵, 畢竟, 主鍵將被替換。這樣我們就不會有任何停止運行的時段。

Ref:
https://learn.microsoft.com/en-us/azure/cosmos-db/sql/sql-query-getting-started


上一篇
Azure開發者必備掌握的基本_第21天_Azure Table Storage_操作與C# API常見操作
下一篇
Azure開發者必備掌握的基本_第23天_Azure Active Directory
系列文
Azure開發者必備掌握的基本30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言