AXForum  
Вернуться   AXForum > Рынок > Microsoft и системы Microsoft Dynamics
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 07.02.2006, 23:43   #9  
Vadik is offline
Vadik
Модератор
Аватар для Vadik
Лучший по профессии 2017
Лучший по профессии 2015
 
3,631 / 1853 (69) ++++++++
Регистрация: 18.11.2002
Адрес: гражданин Москвы
Цитата:
Сообщение от Maxim Gorbunov Посмотреть сообщение
И про Optimistic Concurrency Checking кто-нибудь может доходчиво объяснить, что имелось ввиду? Опять же, в моем переводе:
1. Раньше перед выполнением update, Axapta перечитывала запись с сервера, сравнивала ее с той, что хранилась в памяти и, если они были одинаковыми, строила новую запись и записывала ее в БД.
2. Теперь Axapta также перечитывает запись c сервера и, если она не изменилась, выполняет update.
3. Короче говоря, если нет конфликта, то выполняется только один запрос к БД.

Вызывает интерес значение именно пункта 3: почему один-то, когда запись все равно перечитывается?
Дело в следующем (с). Как уже писалось на axforum-е, сейчас в структуре данных добавлено новое поле - RECVERSION, инициализируется оно значением 1, далее при каждой модификации оно меняется (как генерируется - непонятно, да и не важно, допустим, случайным образом, главное, что две сессии сгенерят два разных значения). При изменении (UPDATE) записи

РАНЬШЕ:
- запись перечитывалась по RecId (select * from myTable where DataAreaId = .. and RecId = ..
- изменения, которые могли быть сделаны другими сессиями, merge-ились с изменениями в текущей сессии

СЕЙЧАС:
- запись не перечитывается, сразу выполняется update myTable where DataAreaId = .. and RecId = .. and RECVERSION = ..
если кто-то уже изменил эту запись, поле RECVERSION имеет уже другое значение и фактически мы "пролетаем" с оператором UPDATE - количество обработанных записей (@@ROWCOUNT) = 0. Поэтому система перечитает запись по RecId и продолжит работу как ни в чем ни бывало (по старому алгоритму)

Т.е. количество операций в среднем по системе таки должно уменьшаться и выигрыш вроде бы есть. Единственное НО: этот механизм работает только на формах (данные, которые отбираются для изменения из кода, уже заблокированы с select forupdate), а данные на формах (по моим ощущениям) вроде бы не особо интенсивно меняются. Стоило ли для это добавлять новое поле во все таблицы - ну, вендору виднее
__________________
-ТСЯ или -ТЬСЯ ?
 


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 05:48.