シーケンス生成の主キーの適切なサイズはどれくらいですか?
-
05-07-2019 - |
質問
現在、システムの主キーは10桁の長さで、Java整数の制限をわずかに超えています。これらのキーの数値オーバーフローによって引き起こされる将来のメンテナンスの問題を回避したいのですが、同時に、決して必要としない無限に大きな数を格納するためにシステムのパフォーマンスをあまり犠牲にしたくありません。
主キーのサイズをどのように管理しますか? Java整数に固執する方が良いでしょう。大きいLongよりもパフォーマンスが向上し、必要に応じてサイズを大きくする必要がありますか、またはほとんどのPKでJava Longを使用して、シーケンスサイズ?
解決
私は常に長いキー(データベース内のnumber(18,0))を使用しました。これは、ほとんどすべての状況でこの状況が発生する可能性を排除するためです(極端なデータ保管スタイルアプリケーションは別として)。キーのすべてのテーブルで同じデータ型を使用することは、親クラスのすべてのモデルオブジェクトでそのフィールドを共有できるだけでなく、SQLゲッターなどの一貫したコードを保持できることを意味します。
他のヒント
答えは、データでJava整数をオーバーフローさせる可能性に依存するようです。また、データが何であるかを知らないと、それを知る方法はありません。
パフォーマンス上のメリットはごくわずかであるため、長いキーを使用することをお勧めします。将来的にそれに対処しなければならないことは、おそらく大きな手間です。
これは、長整数の格納と使用のコストと、32ビット整数のオーバーフローの可能性とのバランスです。
符号なし32ビット整数には40億を超える値が格納されると考えてください。次の136年間、この表で毎秒1行以上の新しい行を平均する予定がある場合は、Longを使用する必要があります。
Javaの32ビット整数は符号付き整数であるため、わずか20億です。何らかの理由でSEQUENCEが時々ジャンプし続けると、PK間にギャップが生じます。
長い時間をかけても害はありません(一部のCOBOL開発者は日付の一部のバイトを節約すると思っていたため、Y2Kの問題が発生したことを覚えていますか?):-)
したがって、私は常にLongを使用します。