0

最近、私は小さなプログラムを書きましたが、注目に値するものは何もありません。主に、当時の実際のアプリケーションに実際には適合しないことがわかったいくつかの新しいことをテストするためのものです。これらのことの 1 つは、Hibernate エンティティに対して (基盤となる Oracle データベースによって) シーケンスによって生成された ID ではなく、UUID を使用することでした。

私の同僚は、これは悪い設計であり、おそらくシステム自体 (データベースによって ID が配信されない、つまり制御が失われる) またはパフォーマンス (UUID を生成するのではなく、データベース側で) に悪影響を与えると主張しました。 、それらを処理します)。この主張を支持するポイントはありますか、それともマンボジャンボですか? つまり、ジェネレーターは Hibernate によって提供されます。誰かがそれを良い考えだと考えたに違いありません。また、シーケンスを取り除くことは、悪いことではなく、オーバーヘッドのように感じるというよりも、良いトレードオフのようです。

4

3 に答える 3

1

主キーの生成にデータベースを正確に使用しないことが、UUID を使用する理由である可能性があります。アプリケーションの複数のインスタンスをデプロイし、グローバル コーディネーターを必要とせずにローカルで ID を生成できます。グローバル コーディネーターを使用すると、スケーラビリティが低下する可能性があります。

一括挿入を行う場合、UUID はキー空間全体に均等に分散され、キーが一意であることを確認するために多くのシークが発生する可能性があるため、パフォーマンスの問題になる可能性があります。

データベースによっては、UUID に関して調整することを検討する必要があります。Postgres には uuid 列があり、MySQL では UTF8 オーバーヘッドを回避するためにバイナリとして表現することができます。

UUID の追加の利点: ID をフロントエンド/エンドユーザーに公開すると、データベース内のオブジェクトの数を確認したり、次の ID を推測したりできなくなります。

于 2013-10-14T11:48:14.180 に答える