Стоит ли пакетно вставлять / обновлять в Hibernate? - PullRequest
0 голосов
/ 10 октября 2018

У меня есть некоторые сомнения относительно функции, которая обновляет несколько сущностей, но она выполняет одну за другой.Конечно, могут возникнуть проблемы с задержкой, если мы работаем с удаленной БД, но кроме этого я беспокоюсь, что мы можем получить исключение OutOfMemoryException из-за количества сущностей, которые мы обновляем в одной транзакции.Мой код выглядит примерно так, как показано ниже.

EntityHeader entityHeader = entityHeaderService.findById(id);
for(EntityDetail entityDetail : entityHeader.getDetails()) {
   for(Entity entity : entityDetail.getEntities()) {
       entity.setState(true);
       entityService.update(entity);
   }
} 

Это пример, и у нас также есть похожий случай в другом методе, но со вставками вместо.Эти методы могут обновлять или вставлять до 2 000 или 3 000 объектов в одной транзакции.Поэтому мой вопрос заключается в том, должны ли мы начать использовать пакетные операции или количество объектов недостаточно велико, чтобы беспокоиться об этом?Кроме того, будет ли он работать лучше, если сделать с помощью пакетной операции?

1 Ответ

0 голосов
/ 11 октября 2018

При оптимизации вещей всегда спрашивайте себя, стоит ли оно времени, например:

  1. Являются ли эти методы каким-то пакетом, запускаемым по ночам, или который вызывается довольно часто?
  2. Достаточно ли высокий прирост производительности или он незначителен?

В любом случае ~ 3k сущностей в одной транзакции звучат неплохо, но есть преимущества для пакета jdbc даже с этими числами (также это довольно легко достичь).

Трудно сказать, когда вам следует беспокоиться о OutOfMemoryException, так как это зависит от того, сколько памяти вы отдаете jvm и насколько велики эти обновления, которые вы обновляете;просто чтобы дать вам какое-то число, у меня лично были некоторые проблемы с памятью, когда мне приходилось вставлять от 10 до 100 тысяч строк в одну транзакцию с 4 ГБ памяти, мне приходилось время от времени очищать и очищать кэш гибернации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...