我有一个将一些数据插入 Azure 表的函数应用程序。是否有可能我会遇到竞争条件并最终两次插入具有相同 ID 的数据,或者 Azure 是否在某些表级锁定下进行插入操作,以确保我不能两次插入相同的东西?重复的字段将是分区键和行键。
就我而言,如果行不存在,我需要插入,如果存在则读取。在我的函数应用程序中,我尝试在写入之前先阅读,但同时另一个实例可能会使用相同的键执行写入操作。如果插入是序列化的,我可以在插入命令失败时回退到阅读。
我有一个将一些数据插入 Azure 表的函数应用程序。是否有可能我会遇到竞争条件并最终两次插入具有相同 ID 的数据,或者 Azure 是否在某些表级锁定下进行插入操作,以确保我不能两次插入相同的东西?重复的字段将是分区键和行键。
就我而言,如果行不存在,我需要插入,如果存在则读取。在我的函数应用程序中,我尝试在写入之前先阅读,但同时另一个实例可能会使用相同的键执行写入操作。如果插入是序列化的,我可以在插入命令失败时回退到阅读。
是否有可能我将获得竞争条件并最终插入具有相同 ID 的数据两次,或者 Azure 是否在某些表级锁定下进行插入操作,以确保我不能两次插入相同的东西?
当然有可能获得竞争条件,但是不可能有重复的条目,即对于一个 PartitionKey/RowKey 组合,表中只能有一个实体。
就我而言,如果行不存在,我需要插入,如果存在则读取。
假设您使用的是 .Net SDK,实现此目的的一种方法是使用插入实体TableOperation.Insert
并捕获异常。如果实体已经存在,那么您将收到Conflict (409)
错误消息。当你得到这个错误时,你可以实现读取实体的逻辑。