Hibernate,什么是最有效的id生成策略?

时间:2013-01-10 13:37:44

标签: java mysql performance hibernate id-generation

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

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

  • IDENTITY
  • SEQUENCE
  • AUTO

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

2 个答案:

答案 0 :(得分:8)

Hibernate中最好的id生成器是增强型表增强型序列,并配有适当的优化器,例如 hilo 。我有增强表 + hilo 的经验,每秒插入超过10,000条记录。

BTW声明“hilo每个生成的实体需要一个额外的查询”这句话显然是错误的:优化器的重点是阻止这个。

答案 1 :(得分:1)

由于您无法使用SEQUENCEAUTO只是自动从现有算法中选择支持的生成器算法,因此您只需IDENTITYTABLE

  • 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。)