Показать сообщение отдельно
Старый 11.05.2006, 15:03   #15  
Torin is offline
Torin
Участник
 
127 / 32 (2) +++
Регистрация: 10.03.2003
Адрес: Odessa, Ukraine
Давайте отделим божий дар и яичницу.
Под словом "версионник" понимают, что ядро СУБД:
1) хранит копию прочитанной записи, копию записанной записи, пока есть открытые курсоры.
2) при записи сравнивает версию прочитанной и записываемой записи.
3) В целом поднимает производительность, позволяя читать и писать одновременно (разным соединениям), до деедлока или "отбрасывания изменения". Мерджи технически невозможны !

http://rsdn.ru/article/db/yukonvers.xml
http://msdn2.microsoft.com/en-US/library/m...90(SQL.90).aspx
надо сказать, что еще стоит изучить - как и что использует Аксапта из этого, или руками "допилить"

Оптимистическая блокировка отличается от пессиместической тем, что первая разрешает изменение прочитанной записи другим соединениям, а вторая - нет. Т.е. если клиент СУБД не должен нарваться на чухое изменение, то он пессиместичен. Но такие штуки являються узким местом конкурентного доступа. Трансакции должны бтыь как можно короче.

Механиз кеширования аксапты на уровне AOS (если я правильно понял) сами по себе должны быть связанны теми же "правилами конкурентного доступа", что и СУБД. Посему стоит отличать механизм реализации конкурентности кэша АОС и самой СУБД (про толстого клиента не знаю, пока не существенно). Говорят, что есть кеш 1-го уровня и 2-го. У каждого свой протокол.

Таким образом, думаю, что:
1) RECVERSION относиться только к реализации "конкурентности" кеша AOS, который может держать образ записей без соединения с базой. Конструкция "update myTable where DataAreaId = .. and RecId = .. and RECVERSION = " может быть использована только в этом случае (из интерфейса). ТОлько в таком случае для версионника (когда выбрали, отключились от базы, опять подключились и делаем изменение) может быть касус с потерей данных (мердже, как некоторые называют)
Я так понял, кеш AOS-а работает только для интерфейса.

2) Тогда логично про замечание, будто запросы из коды сразу с Update блокировкой - в данном случае вообще не используеться кеш Аксапты, а напрямую поддержка версионностив СУБД.

3) Вероятно, должно быть время "обновления" кеша АОС-а, не всегда же показывать "тутфту" пользователю.

Надо сказать, выглядит вполне продумано (в Аксапта). Даже не к чему придраться. Главно, чтобы работало так как надо.