Azure Cosmos DB 中的更改源是按更改发生顺序记录容器中更改的持久记录。 Azure Cosmos DB 中更改源支持的工作原理是侦听 Azure Cosmos DB 容器中发生的任何更改。 然后,它会按照所更改文档的修改顺序输出这些文档的排序列表。 持久保存的更改能够以异步和增量方式进行处理,而且输出可以分发到一个或多个使用者进行并行处理。
若要了解详细信息,请参阅 Azure Cosmos DB 中的更改源设计模式。
支持的 API 和客户端 SDK
目前,以下 Azure Cosmos DB SDK 支持更改源功能。
| 客户端驱动程序 | NoSQL | Apache Cassandra | MongoDB | Apache Gremlin | 表 |
|---|---|---|---|---|---|
| .NET |
|
|
|
|
|
| Java |
|
|
|
|
|
| Python |
|
|
|
|
|
| Node/JavaScript |
|
|
|
|
|
使用更改源
可以使用以下选项来处理更改源:
更改源可用于 Azure Cosmos DB 容器的分区键范围。 这允许它分布在一个或多个使用者之间进行并行处理,如下图所示。
更改源的功能
默认情况下,所有 Azure Cosmos DB 帐户均启用更改源。
存在多种 更改馈送模式,其中一些需要额外配置才能启用。
就像执行任何其他 Azure Cosmos DB 操作一样,可使用预配吞吐量在与 Azure Cosmos DB 帐户关联的任何区域中从更改源进行读取。
更改馈送包括对容器内项执行的插入和更新操作。 如果您使用的是 “所有版本和删除”模式,还会获取由删除操作和 TTL 过期产生的更改。
每项更改在更改馈送中仅出现一次,客户端必须自行管理检查点逻辑。 如果您想避免管理检查点的复杂性,更改馈送处理器提供自动检查点功能和“至少一次”语义。 有关详细信息,请参阅 Azure Cosmos DB 中的更改源处理器。
可以对 Azure Cosmos DB 容器的分区键范围并行进行更改。 多个使用者可以使用此功能并行处理大型容器中发生的更改。
应用程序可以使用同一容器上的任意模式同时请求多个更改源。
可以自定义更改源的起始位置,并且每种模式都有不同的选项可用。
变更源中各项的排序方式
更改源项按其修改时间排序。 这种排序顺序仅保证在每个分区键内有效,而不同分区键值之间的顺序则不作保证。 在事务批处理、存储过程或批量模式请求范围内写入的项具有相同的修改时间,并且该范围内的更改可以按任意顺序传递。
注意
对于多区域写入帐户,有两个时间戳:
- 记录在本地区域写入时的服务器纪元时间。 这被记录为
_ts。 - 记录中确认无冲突或中心区域中的冲突得到解决的 epoch 时间。 这被记录为
crts。
更改源项按 crts 所记录的顺序排列。
Azure Cosmos DB 多区域帐户中的更改源
在多区域 Azure Cosmos DB 帐户中,一个区域中发生的更改将传播到所有区域。 如果写入区域发生故障转移,更改源会在整个手动故障转移操作中发生作用,并且是连续的。 对于具有多个写入区域的帐户,无法保证何时提供更改。 如果另一区域已有更新的更改,在最新版本模式下,同一文档的传入更改可能会被丢弃;而在“所有版本和删除”模式下,所有更改都会被记录。
更改源模式
有两种 可用的更改源模式 : 最新版本 模式和 所有版本和删除 模式。 更改源的读取模式决定了从哪些操作中捕获更改,以及每项更改可用的元数据。 对于同一个 Azure Cosmos DB 容器,可以在多个应用程序中以不同模式使用更改源。
最新版本模式
在最新版本的更改源模式下,对于源中的所有项,你可以看到其最近一次插入或更新所对应的更改,并且该源在容器的整个生命周期内都可用。 系统不会指示给定的更改是来自插入操作还是更新操作,并且不会捕获删除操作。 可以从任意时间点读取这些更改,最早可追溯到容器创建之初。 但是,如果删除某个项,则会从更改源中删除该项。 若要了解更多信息,请参阅最新版本的变更馈送模式。
所有版本和删除模式
所有版本和删除模式允许查看创建、更新和删除操作对项做出的所有更改。 您可以按发生顺序获取对各个项的每次更改记录,包括两次读取更改源之间某个项发生的中间更改。 若要以所有版本和删除模式读取更改源,必须为 Azure Cosmos DB 帐户配置连续备份,这会在 Azure Cosmos DB 中创建所有版本和删除模式的更改源。 在此模式下,只能读取在为帐户配置的连续备份时段内发生的更改。 请参阅 所有版本并删除更改源模式 文章以了解详细信息,包括如何注册帐户。
适用于 Cassandra 和 MongoDB 的 API 中的更改源
在 API for MongoDB 中,更改源功能以更改流的形式提供;在 API for Cassandra 中,则以带谓词的查询形式提供。 若要详细了解 API for MongoDB 的实现细节,请参阅 Azure Cosmos DB API for MongoDB 中的更改流。
原生 Apache Cassandra 提供变更数据捕获(CDC)功能,这是一种机制,用于标记特定表以进行归档,并在 CDC 日志在磁盘上的大小达到可配置阈值时,拒绝对这些表的写入操作。 Azure Cosmos DB for Apache Cassandra 中的更改源功能增强了通过 CQL 使用谓词查询更改的能力。 若要详细了解实现细节,请参阅 Azure Cosmos DB for Apache Cassandra 中的更改源。
度量更改源请求单位消耗量
每个容器都提供更改馈送,无论是否使用该功能。 更改馈送的唯一成本是 租约容器 预配的吞吐量以及每个请求的请求单位 (RU) 消耗。 使用 Azure Monitor 衡量更改源的 RU 消耗量。 有关更多信息,请参阅 如何监控操作的吞吐量或请求单位使用情况。
后续步骤
接下来,请通过以下文章继续详细了解更改源: