Я запускаю пакетное задание JSR-352 (точнее, реализацию Apache JBatch) в среде JEE (WebSphere с EclipseLink в качестве поставщика JPA).
Пакетная обработка записей базы данных порциями и удаляет объекты на основе их идентификаторов с некоторыми условиями. Проблема в том, что после удаления фрагмента объектов следующий фрагмент считывается только через несколько минут, причем задержка увеличивается пропорционально размеру фрагмента, например:
Размер фрагмента = 50: задержка между фрагментами составляет ~10 минут.
Размер фрагмента = 10: задержка между фрагментами составляет ~2 минуты.
Моя работа конфигурация:
Считыватель извлекает идентификаторы из базы данных на основе условия. Я ограничиваю результаты запроса с помощью query.setMaxResults(chunkSize), чтобы избежать одновременного получения всех идентификаторов.
Писатель удаляет объекты по их идентификаторам в цикле, используя em.remove< /code>, обеспечивая правильную обработку каскадных удалений для каждого объекта.
Задание работает, но значительно замедляется по мере увеличения размера фрагмента. Моя установка включает в себя:
Пул соединений, настроенный в WebSphere.
Транзакции, управляемые JPA (JTA).
Я также пробовал массовое удаление, например DELETE FROM Entity WHERE id IN (...), но это не вариант для меня, потому что они не выполняют каскадное удаление связанным организациям. Объект, который я хочу удалить, очень сложный, и в журналах я вижу, что удаление этого объекта приводит к удалению строк примерно из 50 таблиц (хороший ли это дизайн - другой вопрос)
Использование em.flush() в моем средстве записи после обработки каждого фрагмента приводит к тайм-ауту транзакции, поэтому я не использую флеш.
Я также заметил, что em .clear() после каждого фрагмента без flash решает проблему зависания, но изменения не сохраняются в базе данных. Так что просто делать ясность тоже неправильно. Возможно, EntityManager содержит слишком много управляемых объектов, или блокировки/ограничения базы данных могут вызывать замедление работы, но я много пробовал, но не знаю, как решить эту проблему.
Вот код моего Reader:
import java.io.Serializable;
Я запускаю пакетное задание JSR-352 (точнее, реализацию Apache JBatch) в среде JEE (WebSphere с EclipseLink в качестве поставщика JPA). Пакетная обработка записей базы данных порциями и удаляет объекты на основе их идентификаторов с некоторыми условиями. Проблема в том, что после удаления фрагмента объектов следующий фрагмент считывается только через несколько минут, причем задержка увеличивается пропорционально размеру фрагмента, например: [list][*]Размер фрагмента = 50: задержка между фрагментами составляет ~10 минут. [*]Размер фрагмента = 10: задержка между фрагментами составляет ~2 минуты. Моя работа конфигурация: [list] [*]Считыватель извлекает идентификаторы из базы данных на основе условия. Я ограничиваю результаты запроса с помощью query.setMaxResults(chunkSize), чтобы избежать одновременного получения всех идентификаторов. [*]Писатель удаляет объекты по их идентификаторам в цикле, используя em.remove< /code>, обеспечивая правильную обработку каскадных удалений для каждого объекта. [/list] Задание работает, но значительно замедляется по мере увеличения размера фрагмента. Моя установка включает в себя: [list] [*]Пул соединений, настроенный в WebSphere. Транзакции, управляемые JPA (JTA). [/list] Я также пробовал массовое удаление, например DELETE FROM Entity WHERE id IN (...), но это не вариант для меня, потому что они не выполняют каскадное удаление связанным организациям. Объект, который я хочу удалить, очень сложный, и в журналах я вижу, что удаление этого объекта приводит к удалению строк примерно из 50 таблиц (хороший ли это дизайн - другой вопрос) Использование em.flush() в моем средстве записи после обработки каждого фрагмента приводит к тайм-ауту транзакции, поэтому я не использую флеш. Я также заметил, что em .clear() после каждого фрагмента без flash решает проблему зависания, но изменения не сохраняются в базе данных. Так что просто делать ясность тоже неправильно. Возможно, EntityManager содержит слишком много управляемых объектов, или блокировки/ограничения базы данных могут вызывать замедление работы, но я много пробовал, но не знаю, как решить эту проблему. Вот код моего Reader: import java.io.Serializable;
Я работаю над весенним пакетным решением и планирую использовать MongoDB в качестве хранилища заданий. Я ищу ссылки на эту реализацию, но не смог получить никаких ссылок. Затем я проверял Spring-batch-core-3.0.7.RELEASE.jar, но там я не смог увидеть...
У меня есть 2 файла конфигурации пакетов с разными именами бобов, но всякий раз, когда я строю свое приложение и нажимаю с помощью полезной нагрузки запроса, он указывает на первый файл задания с первой партией вместо назначенного....
У меня есть 2 файла конфигурации пакетов с разными именами бобов, но всякий раз, когда я строю свое приложение и нажимаю с помощью полезной нагрузки запроса, он указывает на первый файл задания с первой партией вместо назначенного....