|
Mybatis+PostgreSQL паралелльные потоки
|
|||
---|---|---|---|
#18+
mayton не вижу под капотом какие там режими изоляции Аффтор уже все решил и ушел)) ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2019, 14:20 |
|
Mybatis+PostgreSQL паралелльные потоки
|
|||
---|---|---|---|
#18+
PetroNotC Sharp qi_ip поэтому теоретически select из другого потока должен (не факт) видеть сохраненную запись? Или я не прав? Поставь логирование и дай сюда лог. Пока не знаю, какой лог нужно выложить. Смотрю на два параметра: 1) вызов метода select в логе 2) время инсерта строки в БД. И что-то все равно из другого потока не видит заинсерченную строку. Еще есть варианты, когда запись сделана на 1-5 мс раньше, чем запустился читающий метод, но ее все равно не видно... забыл ник А так? Код: java 1. 2. 3. 4.
забыл ник ....Наверное можно, но мне кажется проще правильно написать push - чтобы он уже отрабатывал когда сессия закрылась, тогда не важно будет из какой сессии идет селект Попробовал, все равно все также (((( PetroNotC Sharp Kachalov а зачем селект после инсерта? такая бизнес логика То что нужно делать после не делают в другом потоке. Пусть логи даст. Один поток обрабатывает входные данные и пишет (таких потоков может быть несколько, зависит от количества входящих соединений). Другой поток - другой джоб, который отвечает только за обработку сохраненных сообщений. PetroNotC Sharp mayton не вижу под капотом какие там режими изоляции Аффтор уже все решил и ушел)) Еще не решил ))) все еще тут. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2019, 14:50 |
|
Mybatis+PostgreSQL паралелльные потоки
|
|||
---|---|---|---|
#18+
Kachalov Проблема: сообщение о записи через шину приходит раньше, чем данные фактически попадают в БД и становятся доступны для чтения. А еще БД может работать в режиме нескольких реплик на чтение Ну это классика же - если нужна консистентность данных то применяем распределенную транзакцию(медленно,но верно) Если требования консистентности можно ослабить(eventual consistency) то вариантов несколько: a) Если данные некритичны - то и хер с ним б) Писать кастомную логику. Например, пришло сообщение с ID =123, делаем селект - если айди нету, то ждем, потом еще раз и еще.. пока не истечет таймааут по SLA - кидаем алерт в мониторинг Пока вижу принципиально два решения (и оба не очень): Kachalov 1) читать данные из общего кэша, т е до того как они фактически попали в БД и стали доступны для чтения; Считай это и есть распределенная транзакция Kachalov 2) проверять доступность данных в БД (тут варианты как, но все кривые) и уже тогда посылать извещение. Кастомная логика, все правильно - только так [/quot] Kachalov Еще идеи? Есть тенденция, что программисты переоценивают степень важности консистентности. У многих бизнес процессов есть встроенные процедуры на реагирование в таких ситуациях. Просто при автоматизации окно, когда дерьмо может произойти(данные с одного офиса не доступны в другом) сокращается с часов до секунды и это вполне устраивает бизнес. Универсального рецепта нет, надо рассматривать каждый конкретный случай в отдельности. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2019, 15:05 |
|
Mybatis+PostgreSQL паралелльные потоки
|
|||
---|---|---|---|
#18+
qi_ip Пока не знаю, какой лог нужно выложить. Тупо час целый думал какой лог нужен? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2019, 15:11 |
|
Mybatis+PostgreSQL паралелльные потоки
|
|||
---|---|---|---|
#18+
Што там вообще за срочность? Диспетчерская аэропорта штоли? В 80% можно согласовать ТЗ чтобы данные синкались в течение нескольких минут. У нас вот справочники стран и валют вообще отстают на несколько дней. И ничо. Бизнес терпит. Просто есть такие данные которые вобщем не срочные. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2019, 15:12 |
|
Mybatis+PostgreSQL паралелльные потоки
|
|||
---|---|---|---|
#18+
mayton Што там вообще за срочность? Диспетчерская аэропорта штоли? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2019, 15:13 |
|
Mybatis+PostgreSQL паралелльные потоки
|
|||
---|---|---|---|
#18+
mayton Што там вообще за срочность? Диспетчерская аэропорта штоли? В 80% можно согласовать ТЗ чтобы данные синкались в течение нескольких минут. У нас вот справочники стран и валют вообще отстают на несколько дней. И ничо. Бизнес терпит. Просто есть такие данные которые вобщем не срочные. есть тесты-кейсы, которые из-за этого селекта фэйлятся - вся суть пройти эти тесты. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2019, 15:15 |
|
Mybatis+PostgreSQL паралелльные потоки
|
|||
---|---|---|---|
#18+
mayton Што там вообще за срочность? Диспетчерская аэропорта штоли? В 80% можно согласовать ТЗ чтобы данные синкались в течение нескольких минут. У нас вот справочники стран и валют вообще отстают на несколько дней. И ничо. Бизнес терпит. Просто есть такие данные которые вобщем не срочные. В тестах есть очередность, которую нужно соблюсти, вот она и не проходит из-за этого. Тесты не мои ) ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2019, 15:16 |
|
Mybatis+PostgreSQL паралелльные потоки
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2019, 15:21 |
|
Mybatis+PostgreSQL паралелльные потоки
|
|||
---|---|---|---|
#18+
qi_ip mayton Што там вообще за срочность? Диспетчерская аэропорта штоли? В 80% можно согласовать ТЗ чтобы данные синкались в течение нескольких минут. У нас вот справочники стран и валют вообще отстают на несколько дней. И ничо. Бизнес терпит. Просто есть такие данные которые вобщем не срочные. В тестах есть очередность, которую нужно соблюсти, вот она и не проходит из-за этого. Тесты не мои ) Модульные тесты это не делают. Они простые как репа. На вход подали управляющее воздействие. Получили выход. Судя по всему ты залез в интеграцию. С интеграцией просто может быть всякое. Например тупо очистка БД между кейсами. Тоесть ты запузырил insert в скоупе 1 теста и почему-то понадеялся что состояние базы должно сохранится. Может да. Может нет. Так оно или нет - сказать сложно. Надо изучать твой тестовый env. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2019, 15:40 |
|
Mybatis+PostgreSQL паралелльные потоки
|
|||
---|---|---|---|
#18+
Даже более того. Модульные иногда исполняются параллельно в потоках чтобы ускорить тестирование. И это лакмус для плохого разработчика. Если они мерцают (flaky) тоесть то проходят то валятся - то это признак того что разраб не понял задачу и втащил глобальное состояние. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2019, 15:42 |
|
Mybatis+PostgreSQL паралелльные потоки
|
|||
---|---|---|---|
#18+
Для Junit я иногда задавал явно Order как пишет Баелдунг https://www.baeldung.com/junit-5-test-order в тех случаях когда важно гарантировать порядок методов. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2019, 15:44 |
|
Mybatis+PostgreSQL паралелльные потоки
|
|||
---|---|---|---|
#18+
Аффтар, начинай опять с прошлой твоей темы. Очередность в наносекундах при параллельных работах. Ты прошлую тему не закрыл. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2019, 15:50 |
|
Mybatis+PostgreSQL паралелльные потоки
|
|||
---|---|---|---|
#18+
Kachalov Еще идеи? Есть, СУБД отправляет необходимое сообщение в шину. Тут недавно обсуждение было в проектировании БД на предмет стоит ли применять триггеры, так вот эта техническая задача как раз через них и решается или жависты по религиозным соображениям не пользуются инструментами СУБД? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2019, 19:04 |
|
Mybatis+PostgreSQL паралелльные потоки
|
|||
---|---|---|---|
#18+
Они не знают как триггеры создавать через Hibernate. Поэтому для них триггеры - нечто запредельно невозможное. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2019, 19:16 |
|
Mybatis+PostgreSQL паралелльные потоки
|
|||
---|---|---|---|
#18+
iOracleDev, В прошлой его теме обсудили и с бд и без бд. На любой вкус. Но автор проспал и добил в ТЗ наносекунды. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2019, 19:17 |
|
Mybatis+PostgreSQL паралелльные потоки
|
|||
---|---|---|---|
#18+
mayton, В хибере тоже триггеры есть) ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2019, 19:17 |
|
Mybatis+PostgreSQL паралелльные потоки
|
|||
---|---|---|---|
#18+
Шикарно. И как экземпляр 1-го хибернейта узнает о том что сработал триггер а 2-м экземпляре (если 2 app-servers подключено к БД)? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2019, 19:30 |
|
Mybatis+PostgreSQL паралелльные потоки
|
|||
---|---|---|---|
#18+
mayton, Я не знаю зачем тут вообще триггеры. Пусть расскажет. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2019, 19:43 |
|
Mybatis+PostgreSQL паралелльные потоки
|
|||
---|---|---|---|
#18+
Сложно сказать. Такой код как автор пишет я-бы сделал не на Batis а JDBC. Потому-что мотивация к использованию батиса очень слабая. Там есть свои плюсы но тут они вообще не выражены никак. Вот к примеру недавно мы словили OutOfMemory на постгресовском драйвере. Пофиксилось следующим образом. Код: java 1. 2.
Явное указание курсора как FORWARD и размер пачки позволило тонко настроить то что надо для задачи. Тоесть необходимый минимум. Как-бы мы такое сделали на батисе - я не знаю. Может можно. Может и нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2019, 20:09 |
|
Mybatis+PostgreSQL паралелльные потоки
|
|||
---|---|---|---|
#18+
PetroNotC Sharp Я не знаю зачем тут вообще триггеры. Пусть расскажет. В таблицу попадает запись от первого сервиса, триггер на таблице формирует сообщение для второго сервиса и помещает его в очередь сообщений, также создает джоб обработки очереди сообщений. По commit фиксируются все изменения в том числе джоб, т.е изменения подтверждены и обработка очереди сообщений для передачи сервисам стартовала. Можно сделать и без триггера, если сообщение от первого сервиса будет вставляться не напрямую в таблицу, а посредством вызова хранимой процедуры в БД, которая инкапсулирует всю обработку сообщения в БД. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2019, 22:40 |
|
Mybatis+PostgreSQL паралелльные потоки
|
|||
---|---|---|---|
#18+
iOracleDev Можно сделать и без триггера, если сообщение от первого сервиса будет вставляться не напрямую в таблицу, а посредством вызова хранимой процедуры в БД, которая инкапсулирует всю обработку сообщения в БД. Лучше уж в хранимке. Правда непонятно что там инкапсулировать. Субд создавали для транзакций. Где тут транзакции с откатами? Субд создавади для модели данных со связями. Где ту модель кроме линецного списка? Может вам просто файлик подойдёт? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2019, 23:20 |
|
Mybatis+PostgreSQL паралелльные потоки
|
|||
---|---|---|---|
#18+
PetroNotC Sharp конечно создавать job в триггере 5000 раз в сек еще то удовольствие). Вставка одной записи и коммит 5000 раз в секунду, не а чё классная архитектура приложения)) PetroNotC Sharp Субд создавали для транзакций. Где тут транзакции с откатами? Проблемы ТС как раз из на них)) PetroNotC Sharp Субд создавади для модели данных со связями. Где ту модель кроме линецного списка? Может вам просто файлик подойдёт? Понятия не имею, зачем ТС-у вставлять какую то запись в БД, передавать сообщение другому сервису, чтобы тот после этого прочитал из БД вставленную запись. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2019, 23:49 |
|
Mybatis+PostgreSQL паралелльные потоки
|
|||
---|---|---|---|
#18+
iOracleDev Проблемы ТС как раз из на них)) Не закрыл постановку задачи в прошлом топике и брослся кодировать. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2019, 07:11 |
|
Mybatis+PostgreSQL паралелльные потоки
|
|||
---|---|---|---|
#18+
PetroNotC Sharp Может вам просто файлик подойдёт? - даже если выкинуть MyBatis, базу и оставить файлик в которой один пишет, а другой читает, возможна описанная архитектурная коллизия: писатель считает что он уже написал и оповещает об этом читателя, а по факту данные в файл еще не попали и для чтения недоступны. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2019, 13:18 |
|
|
start [/forum/topic.php?fid=59&msg=39892407&tid=2120990]: |
0ms |
get settings: |
4ms |
get forum list: |
5ms |
check forum access: |
1ms |
check topic access: |
1ms |
track hit: |
35ms |
get topic data: |
3ms |
get forum data: |
1ms |
get page messages: |
500ms |
get tp. blocked users: |
1ms |
others: | 306ms |
total: | 857ms |
0 / 0 |