避免在Windows Azure中使用主键重复项

use*_*095 3 sql unique azure

在Windows Azure表存储中,没有允许自动递增ID的"类型".我以为我可以使用'IsIdentity',但是复选框是灰色的(这应该让我自动递增,对吧?).

任何人都可以告诉我如何获得自动递增字段或解决方法吗?

谢谢!

Mar*_*dle 7

除非出于某种原因,你实际上需要单调增加数字键,否则使用DateTime.UtcNow.Ticks.ToString()是通常的方法.(因为Table Storage上的PartitionKey值是一个字符串,所以需要将其转换.)

这种方法的优点是Table Storage行由PartitionKey自动排序(然后由RowKey排序),因此您将按插入顺序返回行,就像SQL Server中的IDENTITY列一样.

如果您想要最近返回的记录,请(long.MaxValue - DateTime.UtcNow.Ticks).ToString()改用.

请注意,第一种方法将为接下来的1158年提供一个18位数字.如果您想避免Y3160错误,请考虑使用前导零(DateTime.UtcNow.Ticks.ToString("0000000000000000000"))填充该值.

第二种方法确实会在很长一段时间内给出一个19位数的数字,超过DateTime.MaxValue,所以你可能在那里很好.

还要记住,使用负载平衡等等,如果两个服务器在同一时间创建记录,则很可能会出现重复,因此您应该具有将键值增加1的重试语义.

  • 为"如果你想避免Y3160错误"+1.如果3160年的Eartians因为这个错误而无法使用我的应用程序,那将是一种耻辱. (3认同)