1. 程式人生 > >Azure Cosmos DB介紹及演示

Azure Cosmos DB介紹及演示

Azure Cosmos DB 是 Microsoft 提供的全球分散式多模型資料庫服務。Cosmos DB是一種NoSql資料庫,但是它相容多種API。它支援SQL, MongoDB、Cassandra或 Gremlin,你可以挑選自己喜歡的方式進行儲存跟訪問。 ## 主要優勢 ### 統包式全域性分發 憑藉 Cosmos DB,你可以在全球範圍內生成具有高響應性和高可用性的應用程式。 無論使用者身處何處,Cosmos DB 均可以透明方式複製資料,因此使用者可以與離他們最近的資料副本進行互動。 憑藉 Cosmos DB,還可以隨時向 Cosmos 帳戶新增或刪除任何 Azure 區域,只需單擊一個按鈕即可。 Cosmos DB 將無縫地將資料複製到與 Cosmos 帳戶相關聯的所有區域,同時,得益於該服務的多導功能,應用程式將繼續保持高可用性。 有關詳細資訊,請參閱全域性分發一文。 ### AlwaysOn 憑藉與 Azure 基礎結構和透明多主資料庫複製的深度整合,Cosmos DB 可為讀寫操作提供 99.999% 的高可用性。 Cosmos DB 還提供以程式設計方式(或通過門戶)呼叫 Cosmos 帳戶的區域性故障轉移的功能。 此功能有助於確保應用程式能夠在發生區域性災難時進行故障轉移。 ### 吞吐量和儲存的彈性可伸縮性(全球範圍內) Cosmos DB 採用透明的水平分割槽和多主資料庫複製設計,在全球範圍內為讀寫操作提供了前所未有的彈性可伸縮性。 通過單個 API 呼叫即可在全球範圍內從數千個請求/秒擴充套件到數億個請求/秒,並且只需為所需吞吐量(和儲存)付費。 此功能有助於處理工作負載中的意外峰值,而無需為意外峰值進行過度預配。 有關詳細資訊,請參閱 Cosmos DB 中的分割槽、容器和資料庫上的預配吞吐量以及全域性縮放預配的吞吐量。 保證第 99 個百分位為低延遲(全球範圍內) 使用 Cosmos DB,可以生成響應迅速、具全球規模的應用程式。 憑藉其新穎的多主資料庫複製協議、免閂鎖及優化了寫入的資料庫引擎,,Cosmos DB 可保證全球任意位置第 99 個百分位的讀取(已編入索引)和寫入延遲均低於 10 毫秒。 此功能可以為高響應能力的應用持續引入資料,並提供快速查詢。 ### 精確定義的多個一致性選擇 在 Cosmos DB 中構建全球分散式應用程式時,不再需要在一致性、可用性、延遲和吞吐量之間進行極端的權衡。 Cosmos DB 的多主資料庫複製協議經過精心設計,為一個直觀的程式設計模型(其低延遲和高可用性適用於全球分散式應用程式)提供五個明確定義的一致性選擇 - “強”、“有限過期”、“會話”、“一致字首”和“最終” 。 ### 無需架構或索引管理 對於全球分散式應用來說,讓資料庫架構和索引與應用程式架構保持同步尤其不便。 藉助 Cosmos DB,則無需處理架構或索引管理。 資料庫引擎完全與架構無關。 由於不需要架構和索引管理,因此遷移架構時也不必擔心應用程式停用時間。 Cosmos DB 自動為所有資料編制索引,並可快速提供查詢服務。 > 以上內容摘自[Azure Cosmos文件](https://docs.microsoft.com/zh-cn/azure/cosmos-db/introduction) ## 建立Cosmos DB資源 在portal控制面板找到Cosmos點選建立。 ![whO8Qs.png](https://s1.ax1x.com/2020/09/18/whO8Qs.png) 跟別的資源一樣填寫一個賬戶名,選擇一個離自己近的位置。API選擇MongoDB API。Apply Free Tier Discount選擇Apply。這樣就能開啟免費額度了。 > Cosmos DB的免費額度為:5G儲存,400請求單位/秒。 ## 複製Mongodb連線字串 [![whO5SH.png](https://s1.ax1x.com/2020/09/18/whO5SH.png)](https://imgchr.com/i/whO5SH) 左側選單選擇“連線字串”,複製主連線字串內容,下面會用到。 ## 使用Mongodb API操作資料庫 因為Cosmos支援mongodb協議,所以我們操作Cosmos的時候直接把Cosmos當做mongodb來使用就可以。下面程式碼演示瞭如何使用nodejs的mongodb驅動來操作Cosmos DB。 ``` var MongoClient = require('mongodb').MongoClient; var assert = require('assert'); var ObjectId = require('mongodb').ObjectID; var endpoint = 'mongodb://'; var collectionName = "students"; //新增一個json文件 var insert = function(db, callback) { db.collection(collectionName).insertOne( { "id": "S001", "lastName": "zhou", "birthday": "2019-09-09", "sex": "m", "classId": 0 }, function(err, result) { assert.equal(err, null); console.log("Inserted a document into the students collection."); callback(); }); }; //把collection裡的資料都查出來 var find = function(db, callback) { var cursor =db.collection(collectionName).find( ); cursor.each(function(err, doc) { assert.equal(err, null); if (doc != null) { console.dir(doc); } else { callback(); } }); }; //修改S001的lastName var update = function(db, callback) { var myquery = { "id": "S001" }; var newvalues = { $set: {lastName: "li"} }; db.collection(collectionName).updateOne( myquery,newvalues, function(err, results) { console.log(results); callback(); }); }; //移除lastName為li的內容 var remove = function(db, callback) { db.collection(collectionName).deleteMany( { "lastName": "li" }, function(err, results) { console.log(results); callback(); } ); }; MongoClient.connect(endpoint, function(err, client) { assert.equal(null, err); var db = client.db('school'); insert(db, function() { console.log('insert success .'); find(db, function() { console.log('find success .'); update(db, function() { console.log('update success .'); remove(db, function(){ console.log('remove success .'); }) }); }) }); }); ``` ## 總結 Azure Cosmos DB是微軟基於Azure開發的一款NoSql資料庫,它支援多種資料庫API。比如按SQL方式查詢,按MongoDB方式讀寫等。如果你有海量文件資料需要儲存及查詢,你可以把他儲存在Azure Cosmos DB上,由Azure來為你提供低延時、高吞吐量以及高達99.999%的SLA服務,而你只需要挑選自己喜歡的方式來操作它完成自己的業務。 ## 關注我的公眾號一起玩轉技術 ![](https://s1.ax1x.com/2020/06/29/NfQjds.jpg)