6

我需要通过 Hibernate 将许多实体插入到数据库中。所以,我想找到最有效的 ID 生成算法。

因此, Hibernate Documentation存在四种广泛使用的生成策略:

  • 身份
  • 序列
  • 桌子
  • 汽车

我应该使用 MySQL 数据库,所以我不能应用 SEQUENCE 生成策略。其他策略呢?从性能的角度来看,什么是最有效的?

4

2 回答 2

10

Hibernate 中最好的 id 生成器是enhanced-tableenhanced-sequence,再加上适当的优化器,例如hilo。我有使用enhanced-table + hilo的经验,每秒插入超过 10,000 条记录。

顺便说一句,“hilo 需要对每个生成的实体进行额外的查询”的说法显然是错误的:优化器的全部目的是防止这种情况发生。

于 2013-01-10T14:12:22.370 回答
1

由于您不能使用SEQUENCE,而AUTO只是从现有算法中自动选择支持的生成器算法,因此您只剩下IDENTITYand 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您的链接文档。)

于 2013-01-10T13:50:22.337 回答