|
Двухфазный коммит
|
|||
---|---|---|---|
#18+
Доброго времени суток! На работе столкнулся с проблемой выполнения двухфазного коммита в Cache. Суть в следующем: есть база данных Cache и база данных SQL Server. С помощью маппинга в Cache были созданы таблицы из базы данных SQL Server. Теперь, когда в последней создаётся новая запись, она также создаётся и в маппированной таблице Cache, а потом сохраняется в отдельной, не связанной с SQL Server таблице. Проблема в следующем: если система из Cache изменит поля в своей обособленной таблице, ей необходимо совершить транзакцию по изменению поля и в маппированной таблице. Получается, нам необходимо выполнить две независимых транзакции, и, в случае неудачи одной из них - откатить обе. Иными словами, нужно сделать либо две транзакции, либо ни сделать ни одной. Я почитал в интернете - это распространенная проблема, однако во многих СУБД есть её решение. Меня интересует, есть ли подобная плюшка в Cache. Если это так, это сильно облегчит мне жизнь. Спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
19.06.2013, 17:43 |
|
Двухфазный коммит
|
|||
---|---|---|---|
#18+
feanorcheg , Транзакции и так двухфазны (вернее процесс записи ). Может речь идёт о вложенных транзакциях ? Но распределённые транзакции не поддерживаются для Caché TSQL . Здесь уже встречались с ошибкой #7391 Попробуйте другой вариант: 4112627 feanorchegЯ почитал в интернете - это распространенная проблема, однако во многих СУБД есть её решение.Какие, например, СУБД поддерживают гетерогенные транзакции? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.06.2013, 21:18 |
|
Двухфазный коммит
|
|||
---|---|---|---|
#18+
servit, Oracle точно. Мне нужно реализовать случай, описанный выше - как он называется, не важно. Из университета помню, что такая транзакция называется двухфазной(когда распределенная система совершает коммит в несколько СУБД одновременно). И такие транзакции выполняются в два этапа. Так есть идеи? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.06.2013, 11:51 |
|
Двухфазный коммит
|
|||
---|---|---|---|
#18+
feanorcheg, Сталкивались с такой проблем - контроля распределенных транзакций на Cache<->MsSql (Distributed Transaction Coordinator). Тут у нас получилось 3 варинта 1. MsSql поддерживает DTC, линкуем Cache' к MsSql через LinkedServer и взаимодействие реализуем через MsSql по таскам 2. Пишем сервис на C#/Delphi в котором реализуем подобие DTC между кашей и скулем 3. Реализуем подобие DTC посредством SQL API + ODBC/JDBC в каше Поскольку у нас Cache' знала об MsSql, MsSql о Cache' не ведал (как и в жизни , а вешать между ними еще одно звено не хотелось мы пошли по 3му варианту. О маппинге/проджекшене и прочих "вкусных" внутренних инструментах придется забыть. Нужно будет напрямую обращаться к JDBCContext и вызывать строчные SQL-комманды "BEGIN TRANSACTION" "INSERT INTO ...." .... "COMMIT TRANSACTION". Гемморойно, одним словом. Но на то она и каша..... ... |
|||
:
Нравится:
Не нравится:
|
|||
24.06.2013, 12:20 |
|
|
start [/forum/topic.php?fid=39&fpage=27&tid=1557131]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
171ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
43ms |
get tp. blocked users: |
2ms |
others: | 238ms |
total: | 498ms |
0 / 0 |