首页 > 解决方案 > Cosmos DB 中的更改数据捕获

问题描述

我想通过 azure 函数或其他方式使用计划作业捕获 Cosmos DB(JSON 文档)中更改的数据,而不影响数据库的在线性能,因为 Web 应用程序/移动应用程序正在使用 API 调用将数据读取和写入 Cosmos DB。我想要用于离线 ETL 和分析目的的数据,就像 oracle 提供离线重做日志文件的方式一样。

标签: azure-cosmosdbazure-cosmosdb-sqlapi

解决方案


有两个选项可以通过 Change Feed 执行此操作,具体取决于这需要作为批处理作业运行还是可以流式传输。

如果不需要批量,可以使用内置的 Azure Functions 触发器。这是最简单的方法,但您只能从头开始或从 Azure 函数启动时开始。可以从这里开始,https://docs.microsoft.com/en-us/azure/cosmos-db/change-feed-functions

如果确实需要批处理,您将需要使用 Change Feed Processor 库并配置开始时间以返回到批处理运行的最后日期时间。从这里开始,https://docs.microsoft.com/en-us/azure/cosmos-db/how-to-configure-change-feed-start-time。此处的示例代码,https://github.com/Azure/azure-cosmos-dotnet-v3/blob/master/Microsoft.Azure.Cosmos.Samples/Usage/ChangeFeed/Program.cs

了解 Cosmos 中的 Change Feed 的一些注意事项。首先,它不是真正的操作日志。它只会显示集合中项目的最新版本(更新)并且不显示删除,您需要创建一个“isDeleted”属性并将“软删除”设置为 true。其次,Change Feed 不会告诉您发生了什么变化,只会告诉您发生了什么变化。第三,Change Feed 确实会在它所监控的集合上消耗少量 RU/s,并且在您发出读取以提取数据时再次消耗。但这与写入的 RU/s 相比是很小的。您将需要监控 RU 消耗以确保留出足够的净空。


推荐阅读