Java アプリケーションで int を PK として使用しましたが、最大の int 値 (20 億) に達しました。DB でもそれ以上の数を格納できます。しかし、Java int は約 20 億しか保持できません。
DB に合わせて int を long に変更できません。大変な労力だからです。
これを除いて、誰かアプローチがありますか?
Java の整数の最大値は 2,147,483,647 です。より大きな数が必要な場合は、long に変更する必要があります。Integer の負の範囲を使用することもできますが、既に最大値に達している場合は、すぐに容量が不足する可能性があります。
ただし、DB に 20 億の要素がない場合は、未使用の主キーを再利用できます。未使用のキーを検索する必要があるため、これはおそらく非効率的です。
コードを変更する努力をすることをお勧めします。今の努力は、長い目で見れば報われます。
DBに合わせるためにintをlongに変更できません。大変な努力だからです。
長期的には代替手段はありません。コーディングを開始します。
実際、あなたがそれについて系統だったなら、あなたはおそらくそれがまったく大きな努力ではないことに気付くでしょう。Java IDEは、この種の変更を支援するのに適しています。
@jjnguyは、キーをネガティブにラップアラウンドさせることを提案しました。それはあなたに20億かそこらの余分な鍵を与えるでしょう、しかし:
したがって、ロールオーバーが差し迫っていない限り、それは避けます。
IDに負の値を使用していないことを前提としています。その場合は、値を負の値にオーバーフローさせることができます。これにより、コードをリファクタリングして、を使用しlong
てデータを保存する時間が与えられます。
int を uint や long などに置き換えるだけで済みます。他に方法はありません。
ここにいる誰もがロングに変更することを提案しています。これは、私には最も簡単なアプローチのようにも思えます。ただし、別のものを要求します。
また、長い値を持つ別の列を作成し、PK から値をコピーして、それを PK として設定することもできます。技術的にはこれをより多くの作業と見なしますが、おそらくあなたの状況ではより良いでしょう。厳密には、別のアプローチの質問に対する答えです。
(おそらく、すべてを同時に交換することはできない、数千のシャードがある何らかのシャード状況があるかもしれません)。いずれにせよ、十分に注意してください!テストを実行してください!