powered by simpleCommunicator - 2.0.30     © 2024 Programmizd 02
Map
Форумы / Java [игнор отключен] [закрыт для гостей] / Обращение к базе один раз со Spring Scheduled.
9 сообщений из 9, страница 1 из 1
Обращение к базе один раз со Spring Scheduled.
    #40020132
Wasteland Rebel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Возник такой вопрос.

Есть приложение, которое крутится нон-стопом на сервере, и запускается оно по расписанию, и так каждый день. Есть класс, внутри которого происходят преобразования: на вход приходит строка, она сравнивается со значением из БД, конвертируется и возвращается новая строка. Но проблема в том, что метод, который всё это дело конвертирует, обращается к БД для каждой строки, а строк на вход приходит много. При каждом обращении Hibernate делает 3 Select'а, а строк для конвертации около 10.000. Соответственно 30к обращений к БД на ровном месте.

Хотелось бы как-то это дело пофиксить. Был вариант с @PostConstruct, но он не годится, так как он срабатывает только при поднятии всего этого спрингового контекста, а приложение крутится и крутится, и данные надо актуализировать.

Что я хочу? При запуске приложения по расписанию, при вызове сервиса, который конвертирует строку, инициализировать значения для конвертации из БД только один раз и положить их внутри приложения в какую-нибудь мапу. А дальше по этим значениям быстро через switch/case без обращений к БД.

Думал про блок инициализации, но он срабатывает раньше конструктора, поэтому я полагаю, что при обращении к репозиторию через блок инициализации, я получу null, так как спринг еще не успеет подтянуть все зависимости.

Как быть?
...
Рейтинг: 0 / 0
Обращение к базе один раз со Spring Scheduled.
    #40020156
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Wasteland Rebel,
Во первых у хибера есть кеш второго уровня который выкл по умолчанию. Включи.
Во вторых, с чего взял что 30к это много?
В третьих непонятна постановка:
- в 6 утра каждый день нон стопом это как?)))))
Все веб приложения это нон стоп и крутятся как белка в колесе в ожидании запросов.
...
Рейтинг: 0 / 0
Обращение к базе один раз со Spring Scheduled.
    #40020160
Wasteland Rebel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PetroNotC Sharp
Wasteland Rebel,
Во первых у хибера есть кеш второго уровня который выкл по умолчанию. Включи.
Во вторых, с чего взял что 30к это много?
В третьих непонятна постановка:
- в 6 утра каждый день нон стопом это как?)))))
Все веб приложения это нон стоп и крутятся как белка в колесе в ожидании запросов.

30к много, так это замедляет работу приложения в среднем на полчаса (приложение работает 4 часа).
Нон стопом это так: запускается по расписанию в 6 утра, выгружает статистику за прошедший день и дальше спит до следующего утра.

Zzz79
нихуа не понятно,выкладывай код,рисуй бд схемы!!!
ты пришел и говоришь у меня болит ЖЁпа,я врач и понимаю что твоя жЁпа может болет изза миллиарда причин - например ты плохо себя вел и тебе дали подсрачник,ты много кушал и у тебя понос,ты гей и тут все понятно

тоесть как бы ты товарищ ,обрисуй ситуацию

Да я в принципе описал. Суть вопроса: как проинициализировать значения из БД один раз при каждом запуске по Scheduled. Т.е. @PostConstruct, который срабатывает не при создании бина, а при обращении к этому сервис классу. Есть такое решение или нет? Если нет, то вопрос просто отпадет. :)
...
Рейтинг: 0 / 0
Обращение к базе один раз со Spring Scheduled.
    #40020170
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имеет место проблема перформнса. Проблема сложная. Комплексная и ее надо решать сразу на нескольких уровнях.

Кеширование на клиенте (EhCache?) да - это решение но его надо проговаривать с бизнесом. Обычно кеширование
не очень дружит с консистентностью и этот поинт надо обсуждать. Так просто наобум нельзя совать кеши куда угодно.
Так - бы к любой БД ставили кеши в драйвер и все-бы летало и свистело. Но нелетает...

Из путей что я вижу.

1) Хранимая процедура в БД которая выполнит вместо 3х select запросов 1 call stored procedure. Это уменьшит сетевой траф.
2) Bulk/Batch операция которая исполнит на сервере (опять-же хранимая процедура) все 30 000
data-rows и отдаст отчот на клиент в виде одной большой выборки.
3) Bulk/Batch операция на клиенте которая скачивает одним курсором весь объем данных
по какому-то признаку. Сделает весь процессинг на клиенте (In-Memory? In-Collection? In-Nosql?)

Все эти пути - компромиссы и их надо обсуждать с бизнес-owners кабы чего не вышло.

Каким образом к перформансу автор привязал @PostConstruct я не очень понимаю.
...
Рейтинг: 0 / 0
Обращение к базе один раз со Spring Scheduled.
    #40020204
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
Во первых у хибера есть кеш второго уровня который выкл по умолчанию. Включи.
Во вторых, с чего взял что


Wasteland Rebel,
А выше строчку почему не откомментировал?
Прдозреваю что не знаешь кеширование ни спринга ни хибера ни вообще любое.
А надо знать.
Так как кеширование это инициализация один раз.
...
Рейтинг: 0 / 0
Обращение к базе один раз со Spring Scheduled.
    #40020206
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Wasteland Rebel
30к много, так это замедляет работу приложения в среднем на полчаса (приложение работает 4 часа).
нужно подробнее.
- они в очереди что ли стоят?
- если поставить второй томкат то будет 2 часа?
- если 15 к зайдут пол шестого, а остальные в 6?
)))))
Логика должна работать?
Если вы пришли за хлебом, и очередь. Вы что делаете?
Правильно. Идете в соседний или приходите через пол часа. Или достаете сухари. Это кеш)))))
...
Рейтинг: 0 / 0
Обращение к базе один раз со Spring Scheduled.
    #40020655
Псевдомизантроп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Wasteland Rebel
PetroNotC Sharp
Wasteland Rebel,
Во первых у хибера есть кеш второго уровня который выкл по умолчанию. Включи.
Во вторых, с чего взял что 30к это много?
В третьих непонятна постановка:
- в 6 утра каждый день нон стопом это как?)))))
Все веб приложения это нон стоп и крутятся как белка в колесе в ожидании запросов.

30к много, так это замедляет работу приложения в среднем на полчаса (приложение работает 4 часа).
Нон стопом это так: запускается по расписанию в 6 утра, выгружает статистику за прошедший день и дальше спит до следующего утра.

Zzz79
нихуа не понятно,выкладывай код,рисуй бд схемы!!!
ты пришел и говоришь у меня болит ЖЁпа,я врач и понимаю что твоя жЁпа может болет изза миллиарда причин - например ты плохо себя вел и тебе дали подсрачник,ты много кушал и у тебя понос,ты гей и тут все понятно

тоесть как бы ты товарищ ,обрисуй ситуацию

Да я в принципе описал. Суть вопроса: как проинициализировать значения из БД один раз при каждом запуске по Scheduled. Т.е. @PostConstruct, который срабатывает не при создании бина, а при обращении к этому сервис классу. Есть такое решение или нет? Если нет, то вопрос просто отпадет. :)


Не пойму, в чем проблема.

Напиши метод, реализующий логику инициализации, и вызывай его в самом начале джоба. Или я что-то упускаю?
...
Рейтинг: 0 / 0
Обращение к базе один раз со Spring Scheduled.
    #40020773
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если говорить новомодными патернами:

Singleton ? )))
...
Рейтинг: 0 / 0
Обращение к базе один раз со Spring Scheduled.
    #40021174
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev
Если говорить новомодными патернами:

Singleton ? )))


Вообще то по умолчанию, в рамках Spring-context все бины синглтоны.
Можно их сделать не синглтонами, но там надо поиграть со scope бинов.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Обращение к базе один раз со Spring Scheduled.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]