Hibernateを介してデータベースに多くのエンティティを挿入する必要があります。そこで、Id生成に最も効果的なアルゴリズムを見つけたいと思います。
したがって、 Hibernate Documentationには、広く使用されている4つの生成戦略があります。
- 身元
- 順序
- テーブル
- AUTO
MySQLデータベースを使用する必要があるため、SEQUENCE生成戦略を適用できません。他の戦略はどうですか?パフォーマンスの観点から最も効率的なものは何ですか?
Hibernateを介してデータベースに多くのエンティティを挿入する必要があります。そこで、Id生成に最も効果的なアルゴリズムを見つけたいと思います。
したがって、 Hibernate Documentationには、広く使用されている4つの生成戦略があります。
MySQLデータベースを使用する必要があるため、SEQUENCE生成戦略を適用できません。他の戦略はどうですか?パフォーマンスの観点から最も効率的なものは何ですか?
Hibernateで最高のIDジェネレーターは、 hiloなどの適切なオプティマイザーと組み合わせた拡張テーブルと拡張シーケンスです。私は、1秒あたり10,000を超えるレコードを挿入する、拡張テーブル+ヒロの経験があります。
ところで、「hiloは生成されたエンティティごとに追加のクエリが必要」という記述は明らかに誤りです。オプティマイザの全体的なポイントはこれを防ぐことです。
を使用することはできず、既存のアルゴリズムからサポートされているジェネレータアルゴリズムを自動的に選択するだけなので、とが残りSEQUENCE
ます。AUTO
IDENTITY
TABLE
TABLE
:hi / loアルゴリズムを使用して、hi値のソースとしてテーブルと列を指定し、long、short、またはint型の識別子を効率的に生成します。hi / loアルゴリズムは、特定のデータベースに対してのみ一意の識別子を生成します。->生成されたエンティティごとに追加のクエリを意味します。(オプティマイザーを使用する場合、これは当てはまりません。残念ながら、オプティマイザーが指定されていない場合、オプティマイザーを使用しないことが通常のデフォルトです。)
IDENTITY
:DB2、MySQL、MS SQL Server、Sybase、およびHypersonicSQLのID列をサポートします。->パフォーマンスに関しては、これがHibernateなしで通常行うのと同じ方法です。データベースが生成され、オーバーヘッドはほとんどありません。
Hibernate固有のジェネレーターは他にもありますが、パフォーマンス的にはデータベースで生成されたIDに勝るものはありません。(5.1.2.2.1. Various additional generators
リンクされたドキュメントを参照してください。)