问题标签 [azure-cosmosdb-changefeed]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
474 浏览

azure - 是否可以将更改源处理器主机作为 Azure Web 作业运行?

我希望使用更改源处理器 SDK来监视 Azure Cosmos DB 集合的更改,但是,我还没有看到有关主机是否可以作为 Azure Web 作业运行的明确文档。它可以?如果是,与将其作为控制台应用程序运行相比,是否存在任何已知问题或限制?

有很多关于使用 CFP SDK 的博客文章,但是,其中大多数都含糊地提到在 VM 上运行主机,并且没有一篇或任何将主机作为 azure web 作业运行的示例。

即使有可能,作为一个附带问题,如果这样的主机被部署为一个连续的 Web 作业,并且我将 Web 作业的“Scale”设置选择为多实例,那么使额外实例运行的方法或建议是什么使用 CFP SDK 需要的不同实例名称?

0 投票
1 回答
174 浏览

error-handling - 检测 .NET ChangeFeed 客户端库中的限制 (HTTP 429)

在侦听 .NET 应用程序中的更改源更改时,在集合的高使用率高峰期间,对 CosmosDB 的请求可能会受到限制(HTTP 响应 429)。

适用于 .NET 的 CosmosDB 更改源客户端有 3 种风格:

  1. 原文:Microsoft.Azure.DocumentDB.ChangeFeedProcessorv1.x

  2. 它的v2.x 继任者与 API 兼容,但对代码进行了彻底的更改。

  3. 当前的实现是Microsoft.Azure.Cosmosv3的一部分

这些版本中的哪一个(如果有)支持插入错误处理的方法(以发出有关它的自定义遥测数据)?

原始库在内部实现了重试HTTP 429,我无法找到一种方法来挂钩重试机制。

0 投票
1 回答
376 浏览

azure-cosmosdb - Azure Cosmos db 的最小 TTL 值应该是多少,以便更改源

如果我在 azure cosmos db 中将文档的 TTL 设置为 1 秒,那么它永远不会到达 changefeed 是什么原因?最有可能的是,在计算更改差异之前,数据已被删除。

如果是这个原因,那么 TTL 的最小值应该是多少,才能保证它会出现在 change feed 中?

0 投票
0 回答
19 浏览

azure - 在处理 Azure CosmosDb ChangeFeed 时跟踪列更改

我们目前正在寻求从 Sql 迁移到 CosmosDb(DocumentDb)。为了利用 CosmosDb 的优势,我们必须对数据进行非规范化。但是,在某些情况下,如果原始表中的数据发生变化,我们仍然需要更新相关表。为此,我们计划使用 Change Feed 将任何更改传播到相关表。

例如:考虑一个有两个集合的场景

1) 用户收藏

每个文档的键/列:id、name、displayName

2) 后期收藏

每个文档的键/列:id、userDisplayName、userid

让我们假设用户集合中的文档之一的 displayName 已更改。我们需要使用该 displayName 更新帖子集合中的所有文档,以使帖子集合保持最新(非规范化需要支付的费用)

我们可以处理帖子集合中与更改的用户文档的 displayName 匹配的所有文档。如果用户文档中的其他键经常更改,那么如果该列甚至不是 Post 文档的一部分,则为该用户处理所有帖子是昂贵且不必要的。

我找不到有关更改提要的任何信息,以提供有关更改了哪些列的信息。如果没有,我必须承担这笔费用还是有更好的设计方法?

0 投票
1 回答
264 浏览

c# - 如何在 cosmos DB 中执行大批量操作

我们正在为我们的客户构建一个分析引擎。我们选择了 Cosmos DB。这样做的原因是存储非结构化数据。目前,对于一个客户,我们有大约 300000 条记录。

样本分析项

为了在仪表板中显示累积的详细信息,我们创建了另一个名为 summary 的集合。这将保存每月和每年的预先计算的数据。这是我们将用于我们的客户端应用程序的集合。

样本汇总收集项

我们目前面临的问题是第一次计算累积记录。目前我们正在从分析收集中获取所有数据并从中填充一个列表。然后计算每月和每年的明智,然后插入到摘要容器中。这非常慢并且消耗更多的 RU。此问题仅针对现有数据。我们已经实现了更改馈送处理器来处理实时数据。有什么办法可以减少这个处理时间和 RUs?提前致谢。

0 投票
1 回答
122 浏览

azure-cosmosdb - CosmosDB 更改馈送处理器版本控制和租约分离/处理

我正在尝试在一个名为 Entity 的数据库上实现一个更改提要处理器,其中所有文件都作为“entitytype-entityid”导入。

  1. 我将如何使用租约来区分每种类型的文件?它正在监视一个集合。
  1. 他们还为此添加了版本控制组件。更改“customer499”时,旧记录更改为“customer499-[日期]”,新导入的记录添加为“customer499”。我只希望租约使用新记录,而更改提要使用新记录。

我是 CosmosDB 的新手,我会更改提要。我需要每个租约从其各自的实体类型开始并仅计算它。我想我必须在 HandleChangesAsync 期间调用的委托函数中定义这些东西,但我完全卡住了。

0 投票
2 回答
66 浏览

c# - 当时间戳是可选的时,如何将 C# 字符串拆分为变量?

我有一个从 CosmosDB 中的更改源中读取的“id”字符串。每条记录都是版本化的,因此每当记录更新时,旧记录将被版本化以包含时间戳,并且将添加新记录。

例子:

得到更新

我要做的是获取类型(productbase),然后获取itemId(001.11)并获取时间戳(2020-03-30)。我只需要时间戳,因为我想从我的处理逻辑中进一步排除旧记录。

显然有一个问题将使引用无效,并且将“-”作为分隔符将意味着我将“2020”、“03”和“30”都作为数组中的单独项目。如果我有 3000 次更新,也不确定这会有多慢。

如果有更好的方法来使用 SQL API 来获取这些,那么我会全力以赴。

0 投票
0 回答
60 浏览

.net - 如何在 botapp 中使用 changefeed 刷新 cosmos db 容器中更改的缓存?

我在 Azure 中托管了一个 botapp,使用 cosmos db table1(示例名称)需要缓存在 bot 应用程序中。由于 cosmos db 也可以从另一个应用程序访问,这是一个 Web 应用程序,用户可以通过这个 Web 应用程序更新 table1 中的数据。

所以这里的要求是每当有人从 webapp 更新 table1 中的数据时,botapp 内部的缓存都需要刷新。

PS:两个应用程序共享同一个数据库。

我已经尝试过 ChangefeedProcessor,但它需要托管在机器人应用程序之外,然后为了触发机器人应用程序内的刷新缓存,我必须公开一个我不想要的端点。

参考 - https://docs.microsoft.com/en-us/azure/cosmos-db/change-feed-processor

如果有人可以建议一种在同一个 botapp 中使用/托管 changefeedprocessor 的方法,那么这将是一个很大的帮助,或者另一种刷新缓存的方法。

0 投票
1 回答
1253 浏览

azure - CosmosDB 租约集合不再自动创建

我有一个非常奇怪的问题CosmosDB& Azure Functions。我经常删除我的数据库并在 DEV 中重新创建它。然后我重新部署函数应用程序。当我在应用程序中调用 API 并调用 CosmosDB 触发器时,我通常会看到leases创建的集合。这是一个典型的触发器:

由于某种原因,leases不再创建该集合。我重新创建了数据库,多次重新部署了函数应用程序,但没有成功地进行 API 调用。我错过了什么?

编辑:我查看了日志,发现消息有很多Microsoft.Azure.Documents.ChangeFeedProcessor.Exceptions.LeaseLostException异常The lease was lost,所以我不确定发生了什么。

EDIT2:这是我能够从日志中提取的更详细的错误消息:

“源集合'MyContainer'(在数据库'MyDatabase'中)或租约集合'leases'(在数据库'MyDatabase'中)不存在。这两个集合必须在侦听器启动之前存在。要自动创建租约集合,请设置'CreateLeaseCollectionIfNotExists' 到 'true'

请注意,CreateLeaseCollectionIfNotExists已设置为 true。

0 投票
1 回答
554 浏览

azure-functions - CosmosDBTrigger 可靠地处理每个文档一次?

我的客户想使用 CosmosDBTrigger 将文档传输到 Azure 服务总线。在这种情况下,在 Cosmos 项突变和服务总线消息之间建立 1:1 的关系很重要。因此,触发器接收的每个文档(通过批处理)必须只处理一次,这导致了一些我无法确认的基本问题:

  • 如果代码在处理过程中抛出异常会发生什么?批次会被遗忘吗?
  • 同样,如果函数服务或 CosmosDBTrigger 库在调用 Azure 函数之前存在运行时问题,是否可以在不跳过批处理或复制文档的情况下恢复?
  • 函数有没有办法上报完成状态,比如“未处理”;导致触发器重试批处理?
  • 是否存在相同或不同实例将多次处理同一文档的情况?(我读过几篇声称发生了这种情况的帖子。)

如果最终答案是这个触发器不可靠,只是好奇它的预期用例是什么?

谢谢

-约翰