回答
应该如何处理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