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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 08.08.2008, 13:27   #9  
artkashin is offline
artkashin
Участник
MCBMSS
 
519 / 18 (2) ++
Регистрация: 06.12.2006
Цитата:
Сообщение от FoxSoft2005 Посмотреть сообщение
Вы еще номер транзакции сделайте автоинкрементным
Делал, когда пытался реализовать одновременный учет.
Создавал таблицу Транзакция, Автоинкрементный первичный ключ.

Цитата:
Сообщение от FoxSoft2005 Посмотреть сообщение
А существует реально не код, а его реализация в движке Навика. Да, реализация этого кода не дает возможности работать 1000 пользователей. Боюсь, даже инкремент (ох какой нужный и модный прибамбас, оказывается) не даст возможности нормально работать 1000 пользователям..
Да, к сожалению так. Слишком много кода написано, который просто не поддерживает одновременный учет - и как следствие, уже при 50-60 активных пользователях начинаются первые проблемы. А прибамбас действительно нужный и модный, так как работает просто на порядок быстрее, чем поиск последней записи для целей определения следующего номера.

Код:
Вставка 1 миллиона записей по 1 записи				
Локальная база.				
Попытка	без инкремента					С инкрементом					разница	в процентах
1	19 секунд 157 миллисекунды	12 секунд 157 миллисекунды	7 секунд	158.3333333
2	19 секунд 423 миллисекунды	12 секунд 188 миллисекунды	7 секунд	158.3333333


Вставка 100000 по 1 записи				
SQL Server. Сервер удаленный. Сеть 100 мб/с				
Попытка	без инкремента									С инкрементом					разница					в процентах
1	1 минута 24 секунды 241 миллисекунда	41 секунда 245 миллисекунды	43 секунды	204.8780488
2	1 минута 24 секунды 241 миллисекунда	41 секунда 245 миллисекунды	43 секунды	204.8780488

Код:
NoRecords:=1000000;
StartTime := CURRENTDATETIME;
FOR i:=1 TO NoRecords DO
BEGIN
CLEAR(Autoinc);
Autoinc.INSERT;
END;
EndTime:= CURRENTDATETIME;
MESSAGE(FORMAT(EndTime - StartTime));

StartTime := CURRENTDATETIME;
FOR i:=1 TO NoRecords DO
BEGIN
CLEAR(NoAutoInc);
IF NoAutoIncForEntry.FIND('+') THEN
NoAutoInc.Entry:=NoAutoIncForEntry.Entry+1
ELSE NoAutoInc.Entry:=1;
NoAutoInc.INSERT;
END;
EndTime:= CURRENTDATETIME;
MESSAGE(FORMAT(EndTime - StartTime));

NoAutoInc.DELETEALL;
Autoinc.DELETEALL;
NoAutoInc, AutoInc - таблицы с единственным полем, и оличающиеся свойством AutoIncrement

Вывод: Кроме существенной потери во времени, увеличивается траффик между клиентом и сервером.
 


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

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

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