Azure Cosmos DB 是 Microsoft 提供的全球分布式多模型数据库服务。Cosmos DB是一种NoSql数据库,但是它兼容多种API。它支持SQL, MongoDB、Cassandra或 Gremlin,你可以挑选自己喜欢的方式进行存储跟访问。
凭借 Cosmos DB,你可以在全球范围内生成具有高响应性和高可用性的应用程序。 无论用户身处何处,Cosmos DB 均可以透明方式复制数据,因此用户可以与离他们最近的数据副本进行交互。 凭借 Cosmos DB,还可以随时向 Cosmos 帐户添加或删除任何 Azure 区域,只需单击一个按钮即可。 Cosmos DB 将无缝地将数据复制到与 Cosmos 帐户相关联的所有区域,同时,得益于该服务的多导功能,应用程序将继续保持高可用性。 有关详细信息,请参阅全局分发一文。
凭借与 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文档
在portal控制面板找到Cosmos点击创建。
跟别的资源一样填写一个账户名,选择一个离自己近的位置。API选择MongoDB API。Apply Free Tier Discount选择Apply。这样就能开启免费额度了。
Cosmos DB的免费额度为:5G存储,400请求单位/秒。
左侧菜单选择“连接字符串”,复制主连接字符串内容,下面会用到。
因为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服务,而你只需要挑选自己喜欢的方式来操作它完成自己的业务。