我目前在Azure中设计数据库时遇到一些问题,直到下列内容:
SQL2012自动增量键可以/将定期跳过1000,与SQL 2012的新“功能”相关,如(link)所述。已在Connect (link)
建议使用启动标志来避免此行为(无法使用Azure),或者使用序列来生成递增数字。
但是,Azure DB中不支持SEQUENCE。它实际上是在Connect (link)
所以,我的问题是如何在插入Azure数据库表时实际将字段自动递增1,同时避免大的间隙。
我确实考虑过使用Trigger,然后使用它来查找现有的Max值。看起来不干净。我还认为它会导致并发问题。
我很高兴在这里有一个代理键,但没有序列我想知道在插入时实际生成代理的值的推荐路线是什么。
任何建议表示赞赏。
编辑:请注意我使用较旧的“Web / Business”类型的DB而不是新的层;我不知道这是否会对任何答案产生影响。
答案 0 :(得分:0)
您的反馈被标记为原因的原因是因为自动增加1成为在数据库层大规模解决的非常难的问题。如果你" shard"你的数据库(拆分它以应对负载)每个分片如何知道要递增到哪个数字?这应该从数据库中提取出来并构建到您的应用程序逻辑中。
在不知道增加数字的背景要求的情况下,很难建议正确的解决方案。它是唯一性还是序列?如果序列确实如此,只要数字是(a)唯一且(b)每次插入增加,它每次都不是1真的很重要吗?你能否将这个序列的设置设为离线过程?即 - 通过批处理使用插入日期/时间来分配序列号?
如果它的唯一性使用GUID或类似的。