|
Получение доступа к данным открытой тразакции из другой транзакции
|
|||
---|---|---|---|
#18+
Есть таблица-кэш, которая в фоном режиме обсчитывается отдельным процессом (сервисом). В эту таблицу процедура в транзакции мержит данные и и потом селектит вставленную выборку, ожидая, что сторонний процесс в другой транзакции обсчитает эти данные. Т.е. схема работы: Сторонняя процедура (Процедура1) внутри себя вызывает процедуру (Процедура2), которая генерит выборку данных во временную таблицу, перекладывает для обсчета эти данные в таблицу-кэш и далее селектит эти данные в цикле, ожидая когда сторонний фоновый процесс обсчитает новые данные и изменит им статус. Как-то только данные обсчитываются, Процедура2 апдейт ими свою временную таблицу и работа продолжается. Всё ломается, как только Процедура1 внутри себя объявляется явную транзакцию. получается, что вставленные при работе Процедура2 в таблицу-кэш данные не видны для фонового процесса, т.к. объявленная выше траназкция еще не закоммичена, а оно в свою очередь, не продолжается и стоит в ожидании расчета вставленных в таблицу-кэш данных. Получается замкнутый круг. Возможно архитектурно если все переписать, то можно сделать всё иначе. Но в данном случае стиснутые рамки из-за универасальности механизма. "Процедура1" - это несколько процедур, внутри каких-то из них объявляется транзакция, внутри других нет явной транзакции. Таблица-кэш - необходмость для оптимизации однотипных расчетов из разных мест. Фоновый сервис - вооще на шарпе написанный расчет. Есть какой-то вариант для реализации механизма для доступа к данным текущей транзакции, но который сам работает вне ее пределов? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.04.2021, 18:51 |
|
Получение доступа к данным открытой тразакции из другой транзакции
|
|||
---|---|---|---|
#18+
wvadik, если транзакция не закрыта, то обработка не выполнена. Вполне справедливо, что внешний процесс не может получить доступ, иначе произойдет нарушение целостности, данные будут несогласованными. Выясните причину, по которой открывается эта транзакция. Выясните причину, по которой на момент выполнения Процедуры 2 транзакция оказывается открытой. Если это ошибка, то понятно что делать. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.04.2021, 19:53 |
|
Получение доступа к данным открытой тразакции из другой транзакции
|
|||
---|---|---|---|
#18+
wvadik Есть какой-то вариант для реализации механизма для доступа к данным текущей транзакции, но который сам работает вне ее пределов? Поколения программистов, создававших MS SQL, боролись за то, чтобы это было невозможно. Херней не майтесь. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.04.2021, 19:54 |
|
Получение доступа к данным открытой тразакции из другой транзакции
|
|||
---|---|---|---|
#18+
wvadik внутри себя вызывает процедуру (Процедура2), которая генерит выборку данных во временную таблицу, перекладывает для обсчета эти данные в таблицу-кэш Насколько большим может быть объем нагенеренного? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.04.2021, 20:22 |
|
Получение доступа к данным открытой тразакции из другой транзакции
|
|||
---|---|---|---|
#18+
Вопрос решился путем заливки в таблицу-кэш данных завернутых в json и переданных отдельной процедуре через линокванный на самого себя сервер. Эта процедура распарсивает полученный json и инсертит в таблицу-кэш. Так получилось из открытой транзакции выливать на общий доступ данные для того, чтобы другие процессы могли с ними работать, пока сгенерившая их транзакция ожидает, чтобы эти данные кто-то проапдейтил нужными значениями. Полный анальный изврат. Для тех, кто будет искать ответ на решение подобной проблемы - лучше так не делать и задуматься над архитектурой приложения, чтобы процессы были асинхронны: отдельно заливать в кэш, отдельно его обсчитывать и отдельно получать из него только посчитанные и помеченные к использованию данные. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.04.2021, 22:37 |
|
Получение доступа к данным открытой тразакции из другой транзакции
|
|||
---|---|---|---|
#18+
aleks222 Поколения программистов, создававших MS SQL, боролись за то, чтобы это было невозможно. Из MS SQL уже выпилили TIL Dirty Read? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.04.2021, 13:30 |
|
Получение доступа к данным открытой тразакции из другой транзакции
|
|||
---|---|---|---|
#18+
Сделали хрень ) Чем больше таких архитектурных артефактов, тем дороже будет стоить поддержка ... |
|||
:
Нравится:
Не нравится:
|
|||
18.04.2021, 14:09 |
|
Получение доступа к данным открытой тразакции из другой транзакции
|
|||
---|---|---|---|
#18+
wvadik, так может там не нужны транзакции вовсе. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2021, 15:02 |
|
|
start [/forum/topic.php?fid=46&msg=40063390&tid=1684807]: |
0ms |
get settings: |
11ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
46ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
46ms |
get tp. blocked users: |
1ms |
others: | 309ms |
total: | 444ms |
0 / 0 |