回答
應該如何處理PK可能溢出的情況?
簡單的解決方案是設計架構,以便PK的類型足夠大,以至於在任何合理的用例中溢出都不會發生。
如果這種假設失敗,那麼你有一個問題。我可以想到一些可能的選擇。
將PK類型更改爲「更大」的類型,修改應用程序並遷移數據。
寫一個應用程序來「緊湊」的關鍵空間;即對於每個活動密鑰,使用新密鑰更新所有使用該密鑰的記錄,從空間的開始開始。
包裝密鑰空間,並使用更復雜的生成器獲取下一個密鑰,該密鑰檢查每個候選密鑰是否已被使用。
注意,這種事情通常不會設計成一個系統,這不僅是因爲它是很難預料和難以測試。
我曾在一個32位INT溢出的情況下工作。這是因爲該應用程序意外地爲每個成功的行插入跳過了1000個值。在這種情況下,應用程序達到了最高的已簽名INT值,並且他們無法在該表上再插入任何插入內容。我被調用來幫助他們重構表格以使用BIGINT主鍵。
但是當然之前這樣做,我們必須改變引用表的所有外鍵以使用BIGINT。因爲我們不想在主表中插入一個新的PK值,而這個主表不能被其他表中的FK引用。
應該花費比我們的生命更長的時間來耗盡BIGINT中的值範圍 - 除非每次插入新行時都跳過十億個值!
我寫了一個名爲pk-full-ratio的腳本,它將檢查給定數據庫中的每個AUTO_INCREMENT PRIMARY KEY,並計算它溢出的接近程度(百分比)。
爲您的腳本+1。 – kwelsan 2013-03-04 10:46:05
- 1. 如何處理ColorMatrix溢出?
- 2. NEON如何處理溢出?
- 3. VHDL如何處理溢出?
- 4. 如何處理JAVA WatchService溢出事件?
- 5. 如何處理DependencyProperty溢出情況?
- 6. 如何處理溢出情況?
- 7. 如何處理豬溢出內存
- 8. 如何處理浮點溢出?
- 9. 如何處理長的溢出
- 10. 如何處理這個表溢出?
- 11. 如何處理浮點溢出?
- 12. Javascript處理整數溢出和下溢嗎?如果是,如何?
- 13. 處理ctype.h整數溢出
- 14. CSS處理溢出的div
- 15. 無分支溢出處理
- 16. C++處理隊列溢出
- 17. java如何處理整數溢出和下溢?
- 18. 如何處理ANORM的PK棄用
- 19. 如何管理溢出
- 20. phantomjs/highchart:當導出到PNG/PDF如何處理傳奇溢出
- 21. 未正確處理TextView溢出
- 22. 處理Highstocks中的傳奇溢出
- 23. 工藝處理堆棧溢出
- 24. 處理分數乘法溢出
- 25. 處理算術溢出UInt32(CUnsignedInt)
- 26. 在TextView中處理溢出文本
- 27. 處理溢出表中的行數據
- 28. ARM Neon Assembler - 處理溢出寄存器
- 29. 數學溢出 - 處理大數
- 30. 如何處理浮點下溢?
如果您擔心,您可以使用'bigint',這是不太可能超過其最大值 – iTech 2013-03-04 05:22:59
是的,這是一個實際的解決方案。這裏的關鍵字不太可能。像地球一樣突然成爲星際聯邦的一部分,並且每年都必須處理來自外太空的數十億人的訪問:p。 – 2013-03-04 05:49:34
在現實生活中,可能發生的情況是數據庫是由外部公司設計的,直到公司突然意識到某件事情出錯爲止。在十年或更長的時間裏,這不太可能。這就是爲什麼我很好奇看到的是,如果有人有另一種方式解決這個問題的經驗。說,通過檢索未使用的PK值,使用另一個表或不同的東西。在理想條件下,實際上可能是在數據庫的整個生命週期中保持一顆眼睛,這是開發團隊和數據庫管理員不時處理的事情。 – 2013-03-04 05:51:41