代码之家  ›  专栏  ›  技术社区  ›  user1672994

cosmsdb:如何在插入文档时应用并发(在并行请求中)

  •  1
  • user1672994  · 技术社区  · 8 年前

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

    1. Write 将原始消息放入文档数据库(集合1)
    2. Upsert partition key unique id

    问题陈述:

    正在为分区键和唯一Id创建多个摘要文档

    • 比如说,对于分区键 PartitionKey1 没有总结 在集合中为计算 unique key .
    • 多条消息(假设2条)到达eventhub并触发了azure函数。
    • 几乎在同一时间调用以通过并发请求编写摘要文档,并导致一个PartitionKey和惟一Id具有多个摘要文档。

    我搜索并阅读了 Optimistic Concurrency insert 场景可以处理吗?

    1 回复  |  直到 8 年前
        1
  •  1
  •   Lee Liu    8 年前

    根据您的描述,我建议您使用存储过程来实现这一点。

    Cosmos DB保证所有作为单个存储过程一部分的操作都使用ACID。

    正如这位官员所说:如果注册存储过程所针对的集合是单个分区集合,那么事务的作用域将限定为集合中的所有文档。如果集合已分区,则在单个分区键的事务作用域中执行存储过程。然后,每个存储过程执行都必须包含一个分区键值,该值与事务必须运行的作用域相对应。

    有关Cosmos DB的存储过程以及如何创建存储过程的详细信息,请参阅:

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

    Create and use stored procedures using C#

    推荐文章