Azure Cosmos DB介紹及演示
阿新 • • 發佈:2020-09-18
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)