我在Java应用程序中使用int作为PK,现在它已经达到了最大int值(20亿),即使在DB中它也可以存储比它更多的数字。但是 java int 只能容纳大约 20 亿。
我无法将 int 更改为 long 以与 DB 对齐。因为这是巨大的努力。
除了这个,有人有什么办法吗?
Java 中整数的最大值为 2,147,483,647。如果您需要更大的数字,则必须更改为 long。您也可以使用整数的负值范围,但如果您已经达到最大值,您可能很快就会用完空间。
但是,如果数据库中没有 20 亿个元素,则可以重用未使用的主键。这可能效率低下,因为您必须搜索未使用的密钥。
我建议只是通过更改代码的努力。从长远来看,现在付出努力会得到回报。
我无法将 int 更改为 long 以与 DB 对齐。因为这是巨大的努力。
从长远来看,您别无选择。开始编码。
实际上,如果您有条不紊地进行,您可能会发现这根本不是一项巨大的努力。Java IDE 非常适合帮助您进行此类更改。
@jjnguy 建议您让键环绕为负数。这将为您提供 20 亿左右的额外密钥,但是:
所以我会避免这种情况,除非即将发生翻车。
我假设您没有对 ID 使用负值。如果是这种情况,您可以让值溢出为负值。这将给您一些时间来重构您的代码以使用 along
来存储您的数据。
你只需要用 uint、long 等替换 int 就没有别的办法了
这里大家建议改成long。在我看来,这也是最直接的方法。但是,你要求一个不同的。
您还可以创建另一个具有长值的列,从 PK 中复制该值,然后将其设置为 PK。虽然我认为这在技术上是更多的工作,但对于您的情况来说,它可能会更好,严格来说,这是对您对另一种方法的问题的回答。
(也许你有某种分片情况,有数千个分片,你不可能同时交换所有分片)。无论哪种方式都要非常小心!运行测试!
BigInteger
在 Java 中使用类。你可以变大,我的意思是非常大的值。请参考此链接:如何使用 BigInteger?