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文檔
創建Cosmos DB資源
在portal控制面板找到Cosmos點擊創建。
跟別的資源一樣填寫一個賬戶名,選擇一個離自己近的位置。API選擇MongoDB API。Apply Free Tier Discount選擇Apply。這樣就能開啟免費額度了。
Cosmos DB的免費額度為:5G存儲,400請求單位/秒。
復制Mongodb連接字符串
左側菜單選擇“連接字符串”,復制主連接字符串內容,下面會用到。
使用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服務,而你只需要挑選自己喜歡的方式來操作它完成自己的業務。