powered by simpleCommunicator - 2.0.30     © 2024 Programmizd 02
Map
Форумы / Java [игнор отключен] [закрыт для гостей] / Mybatis+PostgreSQL паралелльные потоки
25 сообщений из 115, страница 2 из 5
Mybatis+PostgreSQL паралелльные потоки
    #39892353
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
не вижу под капотом какие там режими изоляции
лучше сам пусть его не трогает.
Аффтор уже все решил и ушел))
...
Рейтинг: 0 / 0
Mybatis+PostgreSQL паралелльные потоки
    #39892377
qi_ip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PetroNotC Sharp
qi_ip
поэтому теоретически select из другого потока должен (не факт) видеть сохраненную запись? Или я не прав?
должен.
Поставь логирование и дай сюда лог.

Пока не знаю, какой лог нужно выложить. Смотрю на два параметра: 1) вызов метода select в логе 2) время инсерта строки в БД.
И что-то все равно из другого потока не видит заинсерченную строку. Еще есть варианты, когда запись сделана на 1-5 мс раньше, чем запустился читающий метод, но ее все равно не видно...


забыл ник
А так?
Код: java
1.
2.
3.
4.
....} finally {
	sqlSession.close();
}
push();



забыл ник

....Наверное можно, но мне кажется проще правильно написать push - чтобы он уже отрабатывал когда сессия закрылась, тогда не важно будет из какой сессии идет селект

Попробовал, все равно все также ((((

PetroNotC Sharp
Kachalov
а зачем селект после инсерта? такая бизнес логика
я и пишу - Странная логика.
То что нужно делать после не делают в другом потоке.
Пусть логи даст.

Один поток обрабатывает входные данные и пишет (таких потоков может быть несколько, зависит от количества входящих соединений). Другой поток - другой джоб, который отвечает только за обработку сохраненных сообщений.

PetroNotC Sharp
mayton
не вижу под капотом какие там режими изоляции
лучше сам пусть его не трогает.
Аффтор уже все решил и ушел))

Еще не решил ))) все еще тут.
...
Рейтинг: 0 / 0
Mybatis+PostgreSQL паралелльные потоки
    #39892394
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kachalov

Проблема: сообщение о записи через шину приходит раньше, чем данные фактически попадают в БД и становятся доступны для чтения.

А еще БД может работать в режиме нескольких реплик на чтение

Ну это классика же - если нужна консистентность данных то применяем распределенную транзакцию(медленно,но верно)
Если требования консистентности можно ослабить(eventual consistency) то вариантов несколько:

a) Если данные некритичны - то и хер с ним
б) Писать кастомную логику. Например, пришло сообщение с ID =123, делаем селект - если айди нету, то ждем, потом еще раз и еще.. пока не истечет таймааут по SLA - кидаем алерт в мониторинг

Пока вижу принципиально два решения (и оба не очень):
Kachalov

1) читать данные из общего кэша, т е до того как они фактически попали в БД и стали доступны для чтения;

Считай это и есть распределенная транзакция

Kachalov

2) проверять доступность данных в БД (тут варианты как, но все кривые) и уже тогда посылать извещение.

Кастомная логика, все правильно - только так
[/quot]
Kachalov

Еще идеи?

Есть тенденция, что программисты переоценивают степень важности консистентности. У многих бизнес процессов есть встроенные процедуры на реагирование в таких ситуациях. Просто при автоматизации окно, когда дерьмо может произойти(данные с одного офиса не доступны в другом) сокращается с часов до секунды и это вполне устраивает бизнес.

Универсального рецепта нет, надо рассматривать каждый конкретный случай в отдельности.
...
Рейтинг: 0 / 0
Mybatis+PostgreSQL паралелльные потоки
    #39892401
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qi_ip
Пока не знаю, какой лог нужно выложить.
в смысле?
Тупо час целый думал какой лог нужен?
...
Рейтинг: 0 / 0
Mybatis+PostgreSQL паралелльные потоки
    #39892402
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Што там вообще за срочность? Диспетчерская аэропорта штоли?

В 80% можно согласовать ТЗ чтобы данные синкались в течение нескольких минут.
У нас вот справочники стран и валют вообще отстают на несколько дней. И ничо.
Бизнес терпит. Просто есть такие данные которые вобщем не срочные.
...
Рейтинг: 0 / 0
Mybatis+PostgreSQL паралелльные потоки
    #39892405
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Што там вообще за срочность? Диспетчерская аэропорта штоли?
придуривается
...
Рейтинг: 0 / 0
Mybatis+PostgreSQL паралелльные потоки
    #39892406
qi_ip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton
Што там вообще за срочность? Диспетчерская аэропорта штоли?

В 80% можно согласовать ТЗ чтобы данные синкались в течение нескольких минут.
У нас вот справочники стран и валют вообще отстают на несколько дней. И ничо.
Бизнес терпит. Просто есть такие данные которые вобщем не срочные.

есть тесты-кейсы, которые из-за этого селекта фэйлятся - вся суть пройти эти тесты.
...
Рейтинг: 0 / 0
Mybatis+PostgreSQL паралелльные потоки
    #39892407
qi_ip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton
Што там вообще за срочность? Диспетчерская аэропорта штоли?

В 80% можно согласовать ТЗ чтобы данные синкались в течение нескольких минут.
У нас вот справочники стран и валют вообще отстают на несколько дней. И ничо.
Бизнес терпит. Просто есть такие данные которые вобщем не срочные.

В тестах есть очередность, которую нужно соблюсти, вот она и не проходит из-за этого. Тесты не мои )
...
Рейтинг: 0 / 0
Mybatis+PostgreSQL паралелльные потоки
    #39892412
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qi_ip,
Тесты не ваши, а весь геморой придумали вы
22009173
...
Рейтинг: 0 / 0
Mybatis+PostgreSQL паралелльные потоки
    #39892427
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qi_ip
mayton
Што там вообще за срочность? Диспетчерская аэропорта штоли?

В 80% можно согласовать ТЗ чтобы данные синкались в течение нескольких минут.
У нас вот справочники стран и валют вообще отстают на несколько дней. И ничо.
Бизнес терпит. Просто есть такие данные которые вобщем не срочные.

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

Модульные тесты это не делают. Они простые как репа.
На вход подали управляющее воздействие. Получили выход.

Судя по всему ты залез в интеграцию. С интеграцией просто может быть всякое.
Например тупо очистка БД между кейсами. Тоесть ты запузырил insert в скоупе 1 теста
и почему-то понадеялся что состояние базы должно сохранится. Может да. Может нет.
Так оно или нет - сказать сложно. Надо изучать твой тестовый env.
...
Рейтинг: 0 / 0
Mybatis+PostgreSQL паралелльные потоки
    #39892429
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Даже более того. Модульные иногда исполняются параллельно в потоках чтобы ускорить
тестирование. И это лакмус для плохого разработчика. Если они мерцают (flaky) тоесть
то проходят то валятся - то это признак того что разраб не понял задачу и втащил глобальное
состояние.
...
Рейтинг: 0 / 0
Mybatis+PostgreSQL паралелльные потоки
    #39892431
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для Junit я иногда задавал явно Order как пишет Баелдунг

https://www.baeldung.com/junit-5-test-order

в тех случаях когда важно гарантировать порядок методов.
...
Рейтинг: 0 / 0
Mybatis+PostgreSQL паралелльные потоки
    #39892433
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Аффтар, начинай опять с прошлой твоей темы.
Очередность в наносекундах при параллельных работах.
Ты прошлую тему не закрыл.
...
Рейтинг: 0 / 0
Mybatis+PostgreSQL паралелльные потоки
    #39892545
iOracleDev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kachalov
Еще идеи?

Есть, СУБД отправляет необходимое сообщение в шину.

Тут недавно обсуждение было в проектировании БД на предмет стоит ли применять триггеры, так вот эта техническая задача как раз через них и решается или жависты по религиозным соображениям не пользуются инструментами СУБД?
...
Рейтинг: 0 / 0
Mybatis+PostgreSQL паралелльные потоки
    #39892553
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Они не знают как триггеры создавать через Hibernate. Поэтому для них триггеры - нечто запредельно невозможное.
...
Рейтинг: 0 / 0
Mybatis+PostgreSQL паралелльные потоки
    #39892554
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iOracleDev,
В прошлой его теме обсудили и с бд и без бд.
На любой вкус.
Но автор проспал и добил в ТЗ наносекунды.
...
Рейтинг: 0 / 0
Mybatis+PostgreSQL паралелльные потоки
    #39892555
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,
В хибере тоже триггеры есть)
...
Рейтинг: 0 / 0
Mybatis+PostgreSQL паралелльные потоки
    #39892559
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Шикарно. И как экземпляр 1-го хибернейта узнает о том что сработал триггер а 2-м экземпляре
(если 2 app-servers подключено к БД)?
...
Рейтинг: 0 / 0
Mybatis+PostgreSQL паралелльные потоки
    #39892563
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,
Я не знаю зачем тут вообще триггеры. Пусть расскажет.
...
Рейтинг: 0 / 0
Mybatis+PostgreSQL паралелльные потоки
    #39892571
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сложно сказать. Такой код как автор пишет я-бы сделал не на Batis а JDBC.
Потому-что мотивация к использованию батиса очень слабая. Там есть свои
плюсы но тут они вообще не выражены никак.

Вот к примеру недавно мы словили OutOfMemory на постгресовском драйвере.
Пофиксилось следующим образом.

Код: java
1.
2.
PreparedStatement pst = con.prepareStatement(query, ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY, ResultSet.CLOSE_CURSORS_AT_COMMIT);
pst.setFetchSize(ROWS_BATCH_SIZE);



Явное указание курсора как FORWARD и размер пачки позволило тонко настроить то что надо
для задачи. Тоесть необходимый минимум.

Как-бы мы такое сделали на батисе - я не знаю. Может можно. Может и нет.
...
Рейтинг: 0 / 0
Mybatis+PostgreSQL паралелльные потоки
    #39892597
iOracleDev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
Я не знаю зачем тут вообще триггеры. Пусть расскажет.

В таблицу попадает запись от первого сервиса, триггер на таблице формирует сообщение для второго сервиса и помещает его в очередь сообщений, также создает джоб обработки очереди сообщений. По commit фиксируются все изменения в том числе джоб, т.е изменения подтверждены и обработка очереди сообщений для передачи сервисам стартовала. Можно сделать и без триггера, если сообщение от первого сервиса будет вставляться не напрямую в таблицу, а посредством вызова хранимой процедуры в БД, которая инкапсулирует всю обработку сообщения в БД.
...
Рейтинг: 0 / 0
Mybatis+PostgreSQL паралелльные потоки
    #39892602
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iOracleDev
Можно сделать и без триггера, если сообщение от первого сервиса будет вставляться не напрямую в таблицу, а посредством вызова хранимой процедуры в БД, которая инкапсулирует всю обработку сообщения в БД.
конечно создавать job в триггере 5000 раз в сек еще то удовольствие).
Лучше уж в хранимке.
Правда непонятно что там инкапсулировать.
Субд создавали для транзакций. Где тут транзакции с откатами?
Субд создавади для модели данных со связями. Где ту модель кроме линецного списка?
Может вам просто файлик подойдёт?
...
Рейтинг: 0 / 0
Mybatis+PostgreSQL паралелльные потоки
    #39892609
iOracleDev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
конечно создавать job в триггере 5000 раз в сек еще то удовольствие).

Вставка одной записи и коммит 5000 раз в секунду, не а чё классная архитектура приложения))

PetroNotC Sharp
Субд создавали для транзакций. Где тут транзакции с откатами?

Проблемы ТС как раз из на них))

PetroNotC Sharp
Субд создавади для модели данных со связями. Где ту модель кроме линецного списка?
Может вам просто файлик подойдёт?

Понятия не имею, зачем ТС-у вставлять какую то запись в БД, передавать сообщение другому сервису, чтобы тот после этого прочитал из БД вставленную запись.
...
Рейтинг: 0 / 0
Mybatis+PostgreSQL паралелльные потоки
    #39892651
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iOracleDev
Проблемы ТС как раз из на них))
да. Согласен. Проблема в людях.
Не закрыл постановку задачи в прошлом топике и брослся кодировать.
...
Рейтинг: 0 / 0
Mybatis+PostgreSQL паралелльные потоки
    #39892847
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
Может вам просто файлик подойдёт?

- даже если выкинуть MyBatis, базу и оставить файлик в которой один пишет, а другой читает, возможна описанная архитектурная коллизия: писатель считает что он уже написал и оповещает об этом читателя, а по факту данные в файл еще не попали и для чтения недоступны.
...
Рейтинг: 0 / 0
25 сообщений из 115, страница 2 из 5
Форумы / Java [игнор отключен] [закрыт для гостей] / Mybatis+PostgreSQL паралелльные потоки
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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