2014-09-01 32 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