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文件

建立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服務,而你只需要挑選自己喜歡的方式來操作它完成自己的業務。