我需要通过 Hibernate 将许多实体插入到数据库中。所以,我想找到最有效的 ID 生成算法。
因此, Hibernate Documentation存在四种广泛使用的生成策略:
- 身份
- 序列
- 桌子
- 汽车
我应该使用 MySQL 数据库,所以我不能应用 SEQUENCE 生成策略。其他策略呢?从性能的角度来看,什么是最有效的?
我需要通过 Hibernate 将许多实体插入到数据库中。所以,我想找到最有效的 ID 生成算法。
因此, Hibernate Documentation存在四种广泛使用的生成策略:
我应该使用 MySQL 数据库,所以我不能应用 SEQUENCE 生成策略。其他策略呢?从性能的角度来看,什么是最有效的?
Hibernate 中最好的 id 生成器是enhanced-table和enhanced-sequence,再加上适当的优化器,例如hilo。我有使用enhanced-table + hilo的经验,每秒插入超过 10,000 条记录。
顺便说一句,“hilo 需要对每个生成的实体进行额外的查询”的说法显然是错误的:优化器的全部目的是防止这种情况发生。
由于您不能使用SEQUENCE
,而AUTO
只是从现有算法中自动选择支持的生成器算法,因此您只剩下IDENTITY
and TABLE
。
TABLE
:使用 hi/lo 算法有效地生成 long、short 或 int 类型的标识符,给定一个表和列作为 hi 值的来源。hi/lo 算法生成仅对特定数据库唯一的标识符。-> 表示每个生成的实体的额外查询。(如果您使用优化器,则情况并非如此。不幸的是,如果未指定优化器,通常不使用优化器是默认设置。)
IDENTITY
:支持 DB2、MySQL、MS SQL Server、Sybase 和 HypersonicSQL 中的标识列。->性能方面,这是要走的路,就像你在没有 Hibernate 的情况下正常做的一样。生成数据库,几乎没有开销。
存在更多特定于 Hibernate 的生成器,但它们在性能方面不会超过数据库生成的 ID。(请参阅5.1.2.2.1. Various additional generators
您的链接文档。)