我可以在Azure表插入操作上获得竞争条件吗?

时间:2018-04-02 08:22:01

标签: azure concurrency azure-table-storage azure-tablequery

我有一个Function应用程序,可以将一些数据插入到Azure表中。我是否有可能获得竞争条件并最终插入具有相同ID的数据两次,或者Azure是否在某些表级锁定下进行插入操作以确保我不能两次插入相同的内容?重复字段将是分区键和行键。

在我的情况下,我需要插入if row尚不存在,并读取它是否存在。在我的Function应用程序中,我尝试在写入之前阅读,但在此期间,另一个实例可能会使用相同的键执行写操作。如果插入序列化,那么当插入命令失败时,我可以回退到读取。

1 个答案:

答案 0 :(得分:1)

  

我是否有可能获得竞争条件并最终插入   两次具有相同ID的数据,或Azure是否进行插入操作   在一些表级锁定下,将确保我不能插入相同的   东西两次?

当然可以获得竞争条件,但是不可能有重复的条目,即对于一个PartitionKey / RowKey组合,表中只能有一个实体。

  

在我的情况下,如果行不存在则需要插入并读取   如果它存在。

假设您正在使用.Net SDK,实现此目的的一种方法是使用TableOperation.Insert插入实体并捕获异常。如果实体已存在,那么您将收到Conflict (409)错误。当您收到此错误时,您可以实现读取实体的逻辑。