azure-cosmosdb - Cosmos DB 中的更改数据捕获
问题描述
我想通过 azure 函数或其他方式使用计划作业捕获 Cosmos DB(JSON 文档)中更改的数据,而不影响数据库的在线性能,因为 Web 应用程序/移动应用程序正在使用 API 调用将数据读取和写入 Cosmos DB。我想要用于离线 ETL 和分析目的的数据,就像 oracle 提供离线重做日志文件的方式一样。
解决方案
有两个选项可以通过 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 消耗以确保留出足够的净空。
推荐阅读
- c# - 是否可以为事件处理程序声明全局变量?
- sql-server - 如何在 Azure 管道集成测试中更改 sql server 版本?
- elasticsearch - 如何将嵌套对象中的字段从嵌套对象中移出到弹性索引中的单独对象中
- c - C:如何解释包含 2 个结构对象的联合?ULARGE_INTEGER
- flutter - 在颤动中获取当前电话号码
- sql - 搜索 MySQL8 参考手册中使用的示例数据库
- python - 如何选择两个 numpy 索引的范围?
- r - .tiff 文件与 R 中的原始 RasterLayer 不匹配
- database - 如何在postgres中获得均匀数组的平均值?
- javascript - 为什么 [...Array(3)] 给出的结果与 Array(3).map(el => undefined) 不同