介绍
Azure Cosmos DB是Azure无服务器架构中的一员。所有Cosmos的更新维护等操作都是自动的,无需人工干预。
- Multi-model DB: 可以选择使用SQL, Gremlin, Cassandra, table,and MongoDB API等不同API
- 低延迟,保证读取速度少于10ms
- 跨区域即刻数据同步
- 可以根据访问量自动扩容
- 无服架构,无需人工进行管理
- 读取/写入SLA:99.999%
SQL API
通过Azure Cosmos DB SQL API,可以通过类似SQL的语法查询JSON文档
关于partition key的选择:
- 在选择Partition key之后,应最小化跨partition查询。
- 选择的Partition key应使得写操作尽量均匀分布在不同的分区
- 在每个container中的数据项都会有一个item ID。这个item ID在当前分区内是唯一的。这样就可以通过Partition key + item ID作为任何数据的唯一性ID。
创建数据库步骤
首先创建一个Cosmos DB account
然后创建一个container
选择一个partition key (一旦设定后不可修改)
之后就可以添加数据了。
同时可以使用类似SQL语法进行查询:
sql
select * from C where c.city="London"
Using Azure CLI
创建CosmosDB:
bash
az cosmosdb create --name lcodingdb --resource-group lcoding-rg --default-consistency-level Eventual --kind GlobaldocumentDB
一致性的级别
- Strong (Strongest consistency, Lowest throughput): 保证数据一致性,但有延迟。
- Bounded Staleness: 读取数据可能会滞后。但可以保证读取的数据延迟不会超过N个版本,或指定时长
- Session: 在一个特定的客户端会话中, 能够保证读取的数据一致性,又包括:monotonic reads, monotonic writes, read-your-writes, and write-follows-reads
- Consistent prefix: 数据更新会有所滞后,但客户端看到的写入结果是保证有序的。
- Eventual (Lowest consistency, Strongest throughput): 无法保证客户端会读取到哪个版本的数据
关于Change feed
一旦数据更改,就会更新feed,但需要注意:
- 这项功能会监测某个指定容器中的所有变更。
- 会以写入顺序来提供一个有序的文档列表。
- 目前 不支持Table API.
- 可以 过滤change feed,从而只显示特定的操作
- change feed不会包含删除操作。如果想要实现对删除操作的监视,可以在数据项中添加 soft-delete 标记
- 可以通过change feed将变化 发送 到一个 Azure function
- 还可以使用 change feed processor. change feed processor提供类似于automatic checkpoints的功能。
- change feed 可以针对 所有logical partition keys 来使用
创建一个Cosmos DB trigger
Cosmos DB trigger = AWS DynamoDB streams
进入Azure functions, Create a Cosmos DB trigger。在trigger中可以将获取的数据库数据进行输出,或者转存到其他地方。
之后一旦添加/修改数据,这个trigger就会被自动触发。
Cosmos DB stored procedure
- 通过JavaScript编写
- stored procedure是针对某个collection来注册并运行的,并以单一交易的方式来运行。
创建一个Cosmos DB stored procedure
在Cosmos DB中,创建一个stored procedure。注意记录下这个SP的id。之后调用的时候需要使用SP的id,而不是函数名。
JavaScript
function HelloWorld() {
var context = getContext();
var response = context.getResponse();
response.setBody("Hello, World");
}
然后就可以在client中调用这个SP了。
Triggers
- Triggers可以在某个操作之前或之后被触发
- 采用JavaScript书写
- 可以针对创建,删除,和更新操作