08.08.2008, 11:23 | #21 |
Участник
|
Согласен, предлагаю прекратить.. Ведь сколько людей - столько и мнений..
Да!! Верно! И вот посему я и настрочил этот пост! Нюансы надо знать. P.S. Коллеги, а давайте прекратим спор .. Пусть каждый останется со своими "тараканами"..
__________________
"И лишь патологоанатом не берет работу на дом" (с) Вишневский |
|
08.08.2008, 11:28 | #22 |
Участник
|
BULK_INSERT это одно из проявлений бага. А сам баг связан с невозможностью выполнить SET.
__________________
"И лишь патологоанатом не берет работу на дом" (с) Вишневский |
|
08.08.2008, 12:03 | #23 |
Участник
|
Цитата:
Код: GLEntry.LOCKTABLE; IF GLEntry.FIND('+') THEN BEGIN NextEntryNo := GLEntry."Entry No." + 1; |
|
08.08.2008, 12:16 | #24 |
Участник
|
Цитата:
Сообщение от Kashin
А я считаю, что неиспользование автоинкремента, а архаичного метода поиска последней записи и её блокирования только для целей определения номера вставляемой записи - глупо. Вы никогда не задумывались, почему навижн не может работать с 1000 активных пользователей? Потому что существует, в том числе, такой вот код:
Код: GLEntry.LOCKTABLE; IF GLEntry.FIND('+') THEN BEGIN NextEntryNo := GLEntry."Entry No." + 1; А существует реально не код, а его реализация в движке Навика. Да, реализация этого кода не дает возможности работать 1000 пользователей. Боюсь, даже инкремент (ох какой нужный и модный прибамбас, оказывается) не даст возможности нормально работать 1000 пользователям..
__________________
"И лишь патологоанатом не берет работу на дом" (с) Вишневский |
|
08.08.2008, 13:27 | #25 |
Участник
|
Делал, когда пытался реализовать одновременный учет.
Создавал таблицу Транзакция, Автоинкрементный первичный ключ. Цитата:
Код: Вставка 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; Вывод: Кроме существенной потери во времени, увеличивается траффик между клиентом и сервером. |
|
12.08.2008, 11:01 | #26 |
Участник
|
Цитата:
Сообщение от FoxSoft2005
Итак, как мы все знаем в таблицах Navision для поля типа Integer есть замечательно поле AutoIncrement. Всем понятно, зачем оно нужно. Здесь уже много шло дискуссий на эту тему.
Опишу ситуацию из которой следует, что использование оного свойства может создать кучу проблем (рассматриваем NAV+SQL). Итак.. НО!! Если заглянуть в табличку NAV через SQL, то мы увидим еще timestamp. Ну и по поводу рекомендаций - как мне кажется, они сделаны с видом на будущее, потому что в любом случае пока не уберут приведенный код из CodeUnit, нормально это не сможет работать. |
|