Как выполнить пакетную вставку с помощью Playframewok JPA? - PullRequest
5 голосов
/ 30 июля 2011

Мне нужно проанализировать очень большой файл и сохранить полученные объекты в базе данных.Я ожидаю до 150 тыс. Записей на файл и хотел бы обработать их партиями.

Есть ли способ выполнить пакетную вставку объекта Play с помощью JPA?

Ответы [ 2 ]

3 голосов
/ 31 июля 2011

Для экономии памяти вы должны регулярно очищать сеанс, поэтому

Customer.em().getTransaction().begin(); 
for ( int i=1; i<=100000; i++ ) {
   ....
   myCustomer.save();
   if (i%1000==0) { 
       //Customer.em().getTransaction().commit();           
       Customer.em().flush(); 
       Customer.em().clear();
       //Customer.em().getTransaction().begin(); 
   }
}
Customer.em().getTransaction().commit();           

Как вы можете улучшить свою производительность, если оптимизируете размер пакета hibernate.jdbc.batch_size 100

Выможно просто добавить последнюю строку в application.conf, все свойства hibernate. * перейдут непосредственно в hibernate.Подробнее см. Код JPAPlugin.

1 голос
/ 30 июля 2011

Поскольку Play использует Hibernate изнутри, вы должны иметь возможность использовать стандартную пакетную обработку, которую использует Hibernate.См. http://docs.jboss.org/hibernate/core/3.3/reference/en/html/batch.html

Однако Play автоматически управляет транзакциями для вас, поэтому, если вам нужно предотвратить вмешательство Play в управление транзакциями, вы можете пометить свой метод с помощью @play.db.jpa.NoTransaction.

Вы можете узнать больше о JPA Play и поддержке транзакций здесь http://www.playframework.org/documentation/1.2.1/jpa

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