gpt4 book ai didi

azure-cosmosdb - 宇宙数据库 : How to apply concurrency while inserting a document (in parallel requests)

转载 作者:行者123 更新时间:2023-12-05 06:33:24 25 4
gpt4 key购买 nike

背景:

我们有一个 EventHub,每天记录数以千计的事件。 Azure 功能在新消息到达时通过此 eventhub 触发配置。 azure 函数执行以下两个任务:

  1. 将原始消息写入文档数据库(集合 1)
  2. Upsert 摘要(聚合)消息到文档 Db 的集合 2 中。在写入消息之前,它会根据 partition keyunique id(不是 id)检查摘要消息是否已经存在,如果存在文档,则用新文档更新文档聚合值,如果没有则插入一个新文档。此唯一 ID 是根据业务逻辑创建的。

问题陈述:

正在为 PartitionKey 和唯一 Id 创建多个摘要文档

场景详情

  • 假设,对于 PartitionKey PartitionKey1 没有总结在 Collection 中为计算的 unique key 创建的文档。
  • 多条消息(假设 2 条)到达 eventhub 并触发了 azure 函数。
  • 所有这 2 个请求同时运行,因为使用查询没有找到现有文档,所以每个请求都发出一条消息,现在 Upsert 函数是几乎同时调用并发请求编写摘要文档,结果有多个摘要文档为 PartitionKey 和唯一 Id。

我已经搜索并阅读了有关乐观并发 的内容,我肯定会在更新场景中实现它。但我找不到任何方法来处理 insert 场景?

最佳答案

根据你的描述,我建议你使用Stored Procedure来实现。

Cosmos DB 保证属于单个存储过程的所有操作的 ACID。

正如官方所说:如果注册存储过程的集合是单分区集合,那么事务的作用域是集合内的所有文档。如果集合已分区,则存储过程将在单个分区键的事务范围内执行。然后,每个存储过程执行都必须包含一个分区键值,该分区键值对应于事务必须在其下运行的范围。

关于Cosmos DB的存储过程以及如何创建存储过程,可以引用:

Azure Cosmos DB server-side programming: Stored procedures, database triggers, and UDFs

Create and use stored procedures using C#

关于azure-cosmosdb - 宇宙数据库 : How to apply concurrency while inserting a document (in parallel requests),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50756997/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com