Java 如何处理PK溢出?
如何应对PK可能溢出的情况 这不太可能,但仍有可能。我看到一个时事通讯选择退出表单不起作用,因为它可能有很多请求 在应用程序端可以做什么?在MySQL上可以做什么 如何应对PK可能溢出的情况 简单的解决方案是设计模式,使PK的类型足够大,在任何可能的用例中都不会发生溢出 如果这个假设失败了,那么你就有问题了。我可以想出一些可能的选择 将PK类型更改为更大的类型,修改应用程序并迁移数据 编写一个应用程序来压缩密钥空间;i、 e.对于每个活动密钥,更新使用该密钥的所有记录,并将其替换为新密钥。。。从空间的开始开始 包装密钥空间,并使用更复杂的生成器获取下一个密钥,检查每个候选密钥是否尚未使用 请注意,这种东西通常不会设计到系统中,尤其是因为它很难预测和测试 如何应对PK可能溢出的情况 简单的解决方案是设计模式,使PK的类型足够大,在任何可能的用例中都不会发生溢出 如果这个假设失败了,那么你就有问题了。我可以想出一些可能的选择 将PK类型更改为更大的类型,修改应用程序并迁移数据 编写一个应用程序来压缩密钥空间;i、 e.对于每个活动密钥,更新使用该密钥的所有记录,并将其替换为新密钥。。。从空间的开始开始 包装密钥空间,并使用更复杂的生成器获取下一个密钥,检查每个候选密钥是否尚未使用Java 如何处理PK溢出?,java,mysql,sql,overflow,primary-key,Java,Mysql,Sql,Overflow,Primary Key,如何应对PK可能溢出的情况 这不太可能,但仍有可能。我看到一个时事通讯选择退出表单不起作用,因为它可能有很多请求 在应用程序端可以做什么?在MySQL上可以做什么 如何应对PK可能溢出的情况 简单的解决方案是设计模式,使PK的类型足够大,在任何可能的用例中都不会发生溢出 如果这个假设失败了,那么你就有问题了。我可以想出一些可能的选择 将PK类型更改为更大的类型,修改应用程序并迁移数据 编写一个应用程序来压缩密钥空间;i、 e.对于每个活动密钥,更新使用该密钥的所有记录,并将其替换为新密钥。。。从
请注意,这种东西通常不会设计到系统中,尤其是因为它很难预测和测试。我曾经研究过一种32位INT溢出的情况。这是因为应用程序在每次成功插入行时意外跳过了1000个值。在这种情况下,应用程序达到了最高的带符号INT值,他们无法在该表上再进行任何插入。我被叫去帮助他们重新构造表以使用BIGINT主键 当然,在这样做之前,我们必须将引用表的所有外键都更改为使用BIGINT。因为我们不想在主表中插入FK在其他表中无法引用的新PK值 耗尽一个BIGINT中的值范围应该比我们的生命周期要长——除非每次插入新行时跳过十亿个值
我编写了一个名为的脚本,它将检查给定数据库中的每个自动递增主键,并计算它溢出的百分比 我研究过一个32位INT溢出的案例。这是因为应用程序在每次成功插入行时意外跳过了1000个值。在这种情况下,应用程序达到了最高的带符号INT值,他们无法在该表上再进行任何插入。我被叫去帮助他们重新构造表以使用BIGINT主键 当然,在这样做之前,我们必须将引用表的所有外键都更改为使用BIGINT。因为我们不想在主表中插入FK在其他表中无法引用的新PK值 耗尽一个BIGINT中的值范围应该比我们的生命周期要长——除非每次插入新行时跳过十亿个值
我编写了一个名为的脚本,它将检查给定数据库中的每个自动递增主键,并计算它溢出的百分比 如果您担心,可以使用bigint,这不太可能超过它的最大值是的,这是一个实用的解决方案。这里的关键字不太可能。就像地球突然成为银河系联邦的一部分,每年都要处理数十亿来自外太空的生物的访问一样:p.在现实生活中,可能发生的情况是,数据库是由外部公司设计的,直到使用它的公司突然意识到出了问题为止。在十年或更长的时间内,这并非不可能。这就是为什么我想知道是否有人有过用另一种方式解决这个问题的经验。比如说,通过检索未使用的PK值,使用另一个表或其他不同的东西。在理想情况下,实际上可能是在数据库的生命周期中保持一只眼睛,这是开发团队和数据库管理员时不时处理的事情。如果您担心,可以使用bigint,它不太可能超过其最大值是的,这是一个pr
实际解决方案。这里的关键字不太可能。就像地球突然成为银河系联邦的一部分,每年都要处理数十亿来自外太空的生物的访问一样:p.在现实生活中,可能发生的情况是,数据库是由外部公司设计的,直到使用它的公司突然意识到出了问题为止。在十年或更长的时间内,这并非不可能。这就是为什么我想知道是否有人有过用另一种方式解决这个问题的经验。比如说,通过检索未使用的PK值,使用另一个表或其他不同的东西。在理想情况下,实际上可能是在数据库的生命周期中保持一只眼睛,这是开发团队和数据库管理员不时处理的事情。