微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 Azure 表存储中,如何以原子方式进行“获取或插入”?

如何解决在 Azure 表存储中,如何以原子方式进行“获取或插入”?

我正在使用 C#、.NET 5.0 和 Microsoft.Azure.Cosmos.Table 1.0.8 版开发 C# Azure 应用程序。我想做以下事情:

  1. 在表存储中查找具有特定分区键和行键的行/实体。
  2. 如果存在,则返回实体。
  3. 如果不存在,则创建一个,将其存储在表存储中并返回。

我想以原子方式执行此操作以避免竞争条件(即,如果两个线程尝试同时执行此操作,我想保证它们返回相同的值并且只有一个实体存储在表存储中)。>

TableOperationInsertOrMergeInsertOrReplace,但它们似乎不是我想要的。据我所知,他们两个都更喜欢写的 last 值,这是我不想要的。我希望它保留写入的 first 值(以便所有并发线程将返回相同的值)。

我该怎么做?

提前致谢!

解决方法

AFAIK,不可能以原子方式完成您想要做的事情。您将需要执行 2 个操作。

您的第一个操作将是 Insert 操作(而不是 InsertOrMergeInsertOrReplace)。如果实体不存在,则创建该实体并返回新创建的实体。

如果实体存在于表中,您的插入操作将失败并出现 Conflict (409) 错误。您的应用程序代码将需要处理此错误并从表中读取实体并返回该实体。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。