Hibernate, какова наиболее эффективная стратегия генерации id?

Мне нужно вставить много объектов в базу данных через Hibernate. Итак, я хочу найти наиболее эффективный алгоритм для генерации Id.

соответственно Hibernate Документация существует четыре широко используемых стратегий поколения:

  • личность
  • последовательность
  • стол
  • авто

Я должен использовать базу данных MySQL, поэтому я не могу применить стратегию генерации последовательности. А как насчет других стратегий? Что? является наиболее эффективным с точки зрения производительности?

2 ответов


лучшие генераторы id в спящем режиме являются enhanced-table и расширенные-последовательности в сочетании с соответствующим оптимизатора, таких как хило. У меня есть опыт работы с enhanced-table + хило вставить более 10 000 записей в секунду.

кстати, утверждение ,что "hilo нуждается в дополнительном запросе на сгенерированный объект", явно ложно: весь смысл оптимизатора -запретить этот.


как вы не можете использовать SEQUENCE и AUTO просто автоматически выбирает поддерживаемый алгоритм генератора из существующих, вы остаетесь с IDENTITY и TABLE.

  • TABLE: использует алгоритм hi/lo для эффективного генерирования идентификаторов типа long, short или int, учитывая таблицу и столбец в качестве источника значений hi. Алгоритм hi/lo генерирует идентификаторы, уникальные только для конкретной базы данных. -> Означает дополнительный запрос на сгенерированный сущность. (Это неверно, если вы используете оптимизаторы. К сожалению, по умолчанию не используется оптимизатор, если оптимизатор не указан.)

  • IDENTITY: поддерживает столбцы идентификаторов в DB2, MySQL, MS SQL Server, Sybase и HypersonicSQL. -> производительность-мудрый, это путь, так же, как и без спящего режима в обычном режиме. База данных сгенерирована, почти никаких накладных расходов.

существует больше спящего режима конкретные генераторы, но они не будут превосходить производительность по ID, сгенерированному базой данных. (См.5.1.2.2.1. Various additional generators в документе по ссылке.)