Azure云计算教程 - Cosmos DB


介绍

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书写
  • 可以针对创建,删除,和更新操作

文章作者: 逻思
版权声明: 本博客所有文章除特別声明外,均采用 CC BY-NC-ND 4.0 许可协议。转载请注明来源 逻思 !