azure表存储自定义rowKey自动增量

时间:2017-07-21 08:42:29

标签: jquery ajax asp.net-web-api azure-table-storage

我有一个天蓝色的表存储,我使用自定义"数字"作为Rowkey(格式:YYYY-1XXXX)是我的方式,当我插入一个新项目(通过React js ajax Post请求到我的webApi)将1XXXX部分增加1?像这样:2017-10000 - >下一个id应该是2017-10001。

3 个答案:

答案 0 :(得分:0)

没有。 Azure表存储没有自动递增列的方法。值。

要实现这一点,您需要在新实体中手动设置RowKey,这反过来意味着您需要在保存之前知道上一个实体的RowKey是什么。

答案 1 :(得分:0)

没有对它的支持,但有一种模式可以为具有相同分区键的实体执行所需的操作。

首先从max int中减去要增加的行键,然后将该值用作行键。在同一个分区键中,此模式将导致azure表服务将最新插入的实体保留在表的顶部,因为在后端azure表以字典顺序存储实体。

接下来,当您要插入新实体时,只使用分区键和Take(1)进行查询,该查询将返回最新插入的实体,而不对该分区进行任何表扫描(因为行键是反转)。

然后根据最新插入实体的行键计算下一行密钥,并将新实体插入表存储。

在这个阶段,有两件事情可能发生,要么一切正常,你将新实体插入表格顶部的那个分区键,或者在你读取和插入其他人之间插入同一个实体和同一个行键已经,在这个阶段你得到http状态代码409,只需重复重试循环中的步骤。

答案 2 :(得分:0)

根据您的方案,我建议您可以将Blob Storage用作存储最新自动增量值的中央存储,您需要在向表存储添加新项目时读取/更新该值。更新Azure Blob存储中的资源时使用乐观并发很简单,使用特定的前置条件和实体标记(ETag)来更新blob,如果blob更改,ETag也会更改,如果ETag不匹配,则a将遇到HTTP状态码412(前提条件失败),然后您可以重试并重新生成新值。

您可以参考此blog了解更多详情。另外,您可以参考here获取有关BlobOptimisticSyncStore.csUniqueIdGenerator.cs的源代码。此外,以下是关于Auto-increment on Azure Table Storage的类似问题,您可以参考它。