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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 08.08.2008, 11:23   #21  
foxsoft2005 is offline
foxsoft2005
Участник
Аватар для foxsoft2005
 
93 / 10 (1) +
Регистрация: 21.11.2006
Цитата:
Сообщение от SVG Посмотреть сообщение
...
ЗЫ какой-то спор ни о чем..
Согласен, предлагаю прекратить.. Ведь сколько людей - столько и мнений..


Цитата:
Сообщение от romeo Посмотреть сообщение
...
И это главный нюанс нашей работы.
Да!! Верно! И вот посему я и настрочил этот пост! Нюансы надо знать.


P.S. Коллеги, а давайте прекратим спор .. Пусть каждый останется со своими "тараканами"..
__________________
"И лишь патологоанатом не берет работу на дом" (с) Вишневский
Старый 08.08.2008, 11:28   #22  
foxsoft2005 is offline
foxsoft2005
Участник
Аватар для foxsoft2005
 
93 / 10 (1) +
Регистрация: 21.11.2006
Цитата:
Сообщение от SVG Посмотреть сообщение
"http://support.microsoft.com/kb/302621"
Здесь речь о BULK INSERT, при чем тут вставка единичной записи в таблицу?
BULK_INSERT это одно из проявлений бага. А сам баг связан с невозможностью выполнить SET.
__________________
"И лишь патологоанатом не берет работу на дом" (с) Вишневский
Старый 08.08.2008, 12:03   #23  
artkashin is offline
artkashin
Участник
MCBMSS
 
519 / 18 (2) ++
Регистрация: 06.12.2006
Цитата:
Сообщение от FoxSoft2005 Посмотреть сообщение
Насчет использования инкремента в принципе - да, я против, так как считаю инкремент граблями другого разработчика, поставленными для него автором таблицы только из за того, что ему (автору) было впадлу неохота париться с искусственным инкрементом (аля 17 таблица).
А я считаю, что неиспользование автоинкремента, а архаичного метода поиска последней записи и её блокирования только для целей определения номера вставляемой записи - глупо. Вы никогда не задумывались, почему навижн не может работать с 1000 активных пользователей? Потому что существует, в том числе, такой вот код:
Код:
	GLEntry.LOCKTABLE;
	IF GLEntry.FIND('+') THEN BEGIN
	  NextEntryNo := GLEntry."Entry No." + 1;
который присутствует в самом начале 12 кодюнита, хотя блокировать эту таблицу в это время, совершенно не обязательно (можно позже)
Старый 08.08.2008, 12:16   #24  
foxsoft2005 is offline
foxsoft2005
Участник
Аватар для foxsoft2005
 
93 / 10 (1) +
Регистрация: 21.11.2006
Цитата:
Сообщение от Kashin Посмотреть сообщение
А я считаю, что неиспользование автоинкремента, а архаичного метода поиска последней записи и её блокирования только для целей определения номера вставляемой записи - глупо. Вы никогда не задумывались, почему навижн не может работать с 1000 активных пользователей? Потому что существует, в том числе, такой вот код:
Код:
	GLEntry.LOCKTABLE;
	 IF GLEntry.FIND('+') THEN BEGIN
	   NextEntryNo := GLEntry."Entry No." + 1;
который присутствует в самом начале 12 кодюнита, хотя блокировать эту таблицу в это время, совершенно не обязательно (можно позже)
Вы еще номер транзакции сделайте автоинкрементным

А существует реально не код, а его реализация в движке Навика. Да, реализация этого кода не дает возможности работать 1000 пользователей. Боюсь, даже инкремент (ох какой нужный и модный прибамбас, оказывается) не даст возможности нормально работать 1000 пользователям..
__________________
"И лишь патологоанатом не берет работу на дом" (с) Вишневский
Старый 08.08.2008, 13:27   #25  
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

Вывод: Кроме существенной потери во времени, увеличивается траффик между клиентом и сервером.
Старый 12.08.2008, 11:01   #26  
RedFox is offline
RedFox
Участник
 
1,441 / 10 (0) +
Регистрация: 28.12.2004
Адрес: Киев
Цитата:
Сообщение от FoxSoft2005 Посмотреть сообщение
Итак, как мы все знаем в таблицах Navision для поля типа Integer есть замечательно поле AutoIncrement. Всем понятно, зачем оно нужно. Здесь уже много шло дискуссий на эту тему.

Опишу ситуацию из которой следует, что использование оного свойства может создать кучу проблем (рассматриваем NAV+SQL).
Итак..
Хочу сделать маленькое уточнение - AutoIncrement хорошо работает для полей первичного ключа размером из 1 поля.
НО!! Если заглянуть в табличку NAV через SQL, то мы увидим еще timestamp.

Ну и по поводу рекомендаций - как мне кажется, они сделаны с видом на будущее, потому что в любом случае пока не уберут приведенный код из CodeUnit, нормально это не сможет работать.
 


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

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

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