2014-09-01 60 views
0
我在与此刻的设计在Azure中的数据库,下降到以下几个问题

Azure的DB序贯编号

  1. SQL2012自动递增键能/将由1000相当经常跳,与SQL 2012的新“功能”有关,如(link)所述。这已关闭连接中的“按设计”(link)

  2. 建议使用启动标志来避免此行为(不能使用Azure),或者使用序列生成递增数字。

  3. 但是,SEQUENCE在Azure数据库中不受支持。它实际上交替成为一个积极的问题,在连接了“不会解决”的问题之间(link)

所以,我的问题是如何真正去了解一个具有字段自动递增1上插入到Azure数据库表,同时避免大的差距。

我的确在考虑使用触发器,然后使用它来查找现有的最大值。看起来不干净。我也认为这会导致并发问题。

我很高兴有一个代理键在这里,但没有序列我想知道什么推荐的路线将实际上在插入时产生代理的价值。

任何意见赞赏。

编辑:请注意我使用旧的“Web/Business”类型的数据库而不是新的层;我不知道这是否会对任何答案产生影响。

回答

0

您的反馈被标记为原因的原因是因为自动递增1会成为在数据库层面上大规模解决的非常难的问题。如果你对数据库进行“分片”(将其分割以应付负载),每个分片如何知道要增加到哪个数字?这应该从数据库中提取并内置到您的应用程序逻辑中。

不知道增加数字的背景要求,很难建议正确的解决方案。这是为了唯一性还是为了一个序列?如果它是一个序列,那么它真的很重要,只要数字是(a)唯一的,并且(b)在每个插入片段上增加,那么它每次都不是1。你能否将这个序列的设置设置为脱机过程?即 - 通过批处理使用插入日期/时间来分配序列号?

如果是唯一性使用GUID或类似的。

+0

我的反馈?不确定你的意思? – KingCronus 2014-09-01 12:10:22

+0

后台要求适用于账户包中的增量发票号码。增加几个数字并不是一个大问题,但每隔几天就会有1000个数字不会被我的最终用户接受。因此,我使用代理键而不是前端的身份字段。目前我一直按照您的说法进行操作,并使用计划任务分配序列号,但我认为必须有更好的“SQL”方法才能完成。 – KingCronus 2014-09-01 12:12:18

+0

我的意思是您对Microsoft Connect的反馈。 – 2014-09-01 23:17:10