Имя: Пароль:
1C
 
Длина кода справочника и производительность. Неужели так критично?
0 itPiligrim
 
21.12.06
10:02
Разрабатываю конфу. В силу предметной области встала необходимость сделать длину кода справочника 36 символов. Знаю, что больше 11 не рекомендуется. Сложных запросов к этому справочнику не будет, но вот НайтиПоКоду будет очень часто использоваться. Повел тестирование на 100 тыс. элементах (больше маловероятно, что будет в реальных условиях). Получение объекта справочника через Найти По коду проходит очень быстро за 0,009002. Меня устраивает.

Так почему же пишут, что большая длина кода плохо? Где может таиться опасность?
1 Obersturmbannfuhrer
 
21.12.06
10:03
а почему не завечти реквизит СоставнойКодИз36Символов. и искать по нему
2 itPiligrim
 
21.12.06
10:08
А какая разница? Искать по коду или по реквизиту??? Только дополнительный лишний индекс будет, так как придется этот реквизит индексировать. Принципиальной разницы  не вижу.
Плюс для кода есть автоматический контроль уникальности....
3 Худой
 
21.12.06
10:12
Ты объясни для чего такой год?
4 itPiligrim
 
21.12.06
10:17
В коде хранится уникальный идентификатор. Понятно, почему именно 36 :)
В этот справочник будет сливаться информация из разных других баз, при этом этих баз потенциально может быть очень много и невозможно проконтролировать какие коды будут вводить пользователи, да и вообще заранее неизвестно про них ничего, так что трюк с префиксом как для распределенной БД не пройдет.
5 Худой
 
21.12.06
10:21
Да это понятно, что уникальный идентификатор. Он может быть и из 5 символов уникальным.
С какого перепугу такой длины код фигачить то? Ты его состав можешь описать?
6 itPiligrim
 
21.12.06
10:25
Я его получаю через
GUID = Новый УникальныйИдентификатор;
А как иначе гарантировать с большой долей вероятности уникальность записей в распределенных базах про которые ничего не знаешь.
7 MikleV
 
21.12.06
10:26
(6) 1. префиксы.
2. гуид не даёт гарантий уникальности.. бывает совпадают
8 Defender aka LINN
 
21.12.06
10:29
(7) О_о ГУИД - это Гарантированый Уникальный ИДентификатор.
ГАРАНТИРОВАНЫЙ. И, по заверениям разработчиков, будет таковым до 3100 примерно года.
9 masky
 
21.12.06
10:29
(7) правда?
(0) потому что на текстовых полях индексы большие сильно. и ищется медленнее чем на бинарных. guid у нормальных людей имеет тип varbinary..
10 itPiligrim
 
21.12.06
10:34
(7) Цитатата из справки:
"Создает новый гарантированно уникальный идентификатор."
11 Худой
 
21.12.06
10:34
(6)Ну получишь ты этот самый GUID. И что тебе с ним дальше делать? Ты хоть подумал об этом? Для чего он тебе, поясни публике.
12 masky
 
21.12.06
10:34
а вот что разработчики говорят :Using uniqueidentifier Data
The uniqueidentifier data type stores 16-byte binary values that operate as globally unique identifiers (GUIDs). A GUID is a unique binary number; no other computer in the world will generate a duplicate of that GUID value
13 itPiligrim
 
21.12.06
10:35
(9) И как сделать по нормальному в 8-ке GUID???
14 masky
 
21.12.06
10:37
(13)BOL - Using uniqueidentifier Data
A GUID value for a uniqueidentifier column is usually obtained:

In a Transact-SQL statement, batch, or script by calling the NEWID function.


In application code by calling an application API function or method that returns a GUID.
15 itPiligrim
 
21.12.06
10:49
(14) Все же не думаю, что поиск будет быстрее.
16 itPiligrim
 
21.12.06
10:52
(11) А нужен это GUID, чтобы можно было делать ссылки по нему из разных мест, например в HTML странице, в произвольных XML и т.д., там где ссылочная целостность естественно не поддерживается.
17 Худой
 
21.12.06
10:55
(16)Только для того, "чтобы можно было делать ссылки по нему из разных мест"? Для чего?
18 GStiv
 
21.12.06
11:02
может проще завести регистр сведений, по типу штрихдода в котором будет храниться нужная вам информация
19 itPiligrim
 
21.12.06
11:05
(17) Для того, чтобы делать ссылки.... Для чего делают ссылки? Чтобы получить объект из базы по его коду.... Но эти объекты создаются в разных местах, а не в одной базе или заранее известном наборе баз.
20 masky
 
21.12.06
11:05
(15) быстрее чем вгде?
21 Туц
 
21.12.06
11:06
Налицо спор по двум позициям
1. Уникальность GUID
2. Скорость поиска по индексам

По первому: шанс повторения GUID на разных компьютерах очень мал. На столько мал, что можно сказать "Совпадение GUID невозможно". Мы имеем 4,9732323640978664215538224814682e+86 возможных значений.
2. Копайте в сторону реализации поиска по индексам на уровне dll-ок 1с-ки. Если не знаете как, то разговор беспредметный.
22 itPiligrim
 
21.12.06
11:08
(20) Чем использовать NEWID function, она так же генерирует размер года в 16 bit.
23 masky
 
21.12.06
11:10
(21)
1)The uniqueidentifier data type stores 16-byte binary values that operate as globally unique identifiers (GUIDs). A GUID is a unique binary number; no other computer in the world will generate a duplicate of that GUID value. [пропущено]
The Transact-SQL NEWID function and the application API functions and methods generate new uniqueidentifier values from the identification number of their network card plus a unique number from the CPU clock. Each network card has a unique identification number.
2) причем здесь индексы и dll'и клиента?
24 masky
 
21.12.06
11:11
(22)The uniqueidentifier data type stores 16-byte binary values
25 itPiligrim
 
21.12.06
11:11
(21) Совершенно верно, но при тестировании на 100 тыс. записей скорость устраивает. Но от чего еще зависит скорость? Тестовая база в файловом варинте была  3,5 GB и состояла из 100 тыс. записей в тестируемом справочнике и 35 тыс записей в  одном регистре сведений, он имеет связь с этим справочником. Тестировал поиск по справочнику и регистру. Скорость устраивает. Но будут ли проблемы при реальном использовании? Какие могут быть подводные камни? От чего еще зависит скорость?
26 Худой
 
21.12.06
11:12
(19)Вот. Приходим к тому, от чего ушли - "Для чего делают ссылки? Чтобы получить объект из базы по его коду". А как ты будешь указывать из какой базы эту ссылку брать?
27 itPiligrim
 
21.12.06
11:14
(19) Данные будут сливаться в одну базу.
28 masky
 
21.12.06
11:15
(25) еще индексы по тестовым полям больше чем по бинарным. все.
29 Туц
 
21.12.06
11:16
(23) Сорри думал речь идёт о v7. Но суть примерно та же.
30 masky
 
21.12.06
11:23
в последний раз спрашиваю  что общего между индесками и dll?
31 Terv
 
21.12.06
11:25
бредовая ветка
32 itPiligrim
 
21.12.06
11:27
Так кто-нибудь расставит все точки над И...???
33 masky
 
21.12.06
11:27
34 mikeA
 
21.12.06
11:34
(32) поищи тут недавно была большая ветка на тему использования GUID в качестве индексов
35 AntonioS
 
21.12.06
11:35
(0) есть другая идея.
не хранить идентификатор объектов других баз в коде, а формировать элемент справочника как ссылку, имеющую тот же идентификатор, что и объект другой базы.
Т.е. если есть строка идентификатора СтрокаGUID, то создавать элемент с помощью метода ПолучитьСсылку(Новый УникальныйИдентификатор(СтрокаGUID)).
Этим же методом можно и искать элемент.
Смысл в том, что внутренние ссылки у элементов в интергационной базе будут такими же как и ссылки элементов других баз.
36 Худой
 
21.12.06
11:44
Черт с этими гуидами. Это ерунда. Я не могу понять, где и как афтар сбирается искать эти объекты?
37 mikeA
 
21.12.06
11:46
(36) в базе большой куда он их из маленьких баз сольет, по GUID, как я понял
38 itPiligrim
 
21.12.06
11:49
(35) Отличная идея! Но все же как быстро искать нужный элемент? Не понятно.
39 itPiligrim
 
21.12.06
11:52
(36) Ну допустим простой пример. Внешнее приложение обращается к базе 1С и говорит: найди мне объект имеющий этот GUID и верни мне его свойства. Есть еще варианты....
40 AntonioS
 
21.12.06
11:55
(38) если ты ищешь по строке гуида, то
НайденнаяСсылка = Справочники.ОбъектыДругихБаз.ПолучитьСсылку(Новый УникальныйИдентификатор(СтрокаGUID)).

насколько это быстрее или медленнее поиска по коду - не знаю.
можно предполагать, что по причине, указанной в (9) будет быстрее, чем по коду искать
41 Худой
 
21.12.06
11:56
(39)Ты представляешь себе, откуда внешнее приложение будет знать этот самый гуид?
Чего мозгу то парить? Прокрути, для начала, не абстрактные ситуации. А то разворошил народ с этими самыми гуидами.
42 itPiligrim
 
21.12.06
11:58
(41) Блин у меня уже есть прототип. Для чего мне это нужно вопрос не ставится, не буду же я все на форуме рассказывать что за конфа для какой компании и т.д. Меня интересует как сделать лучше, чем есть сейчас.
43 DK_L
 
21.12.06
12:00
(42)ИМХО ГУИД тебе не нужен,с префиксами будет все просто замечательно
44 itPiligrim
 
21.12.06
12:02
(40) Конструктивная идея, надо попробовать, сравнить. Первая разумная идея, спасибо AntonioS.
45 Худой
 
21.12.06
12:06
(42)ок. Как хош. Тогда присоединяюсь к (43).
И, вообще, правильнее было бы держать не справочник, а регистр сведений. В который заносить код объекта метаданных, код самого объекта и код базы, в которойискать этот объект.
Например
Документ.Выписка,"000131","База1"
Справочник.Номенклатура,"00657","База4"
.....
Документ.Счет,"43267","База1"

и т.д.
46 DK_L
 
21.12.06
12:09
В код запихать ГУИД - бред... (ничего личного)
47 AntonioS
 
21.12.06
12:13
(44) не на чем. если бы у меня была такая конкретная задача, я бы наконец собрался посмотреть 1С:Интеграция. Наверное, там много полезных идей.
А так все руки не доходят. :)
48 Худой
 
21.12.06
12:14
(46)Я тоже думаю, что это бред сивой кобылы. Просто афтар ссылается на уже готовый функционал. Который, мне кажется, тоже такой же бредовый, как и идея с гуидом.
49 itPiligrim
 
21.12.06
12:14
(43) (45) Повторюсь, мы не знаем эти базы заранее, сложно представить, но это так.  
Вариант  AntonioS (40) посмотрел работает отлично, мне нравится. В принципе скорость чуть-чуть быстрее, но решение зато красивое.
50 itPiligrim
 
21.12.06
12:15
(46) Никто в код запихивать GUID не собирается....
51 AntonioS
 
21.12.06
12:18
(49) я несколько не понял. все таки по производительности что быстрее по коду искать или по ссылке? если есть замеры, то интересно узнать насколько.
52 itPiligrim
 
21.12.06
12:23
(51)По ссылке быстрее:
Замеры такие:
По коду: 5000 элементов - время 0,008349
        100000 элементов - время в пределах от 0,009002 до 0,02, для разных элементов справочника, видимо на скорость влияют разные факторы.

По ссылке: 100000 эл. - время стабильно в районе 0,008, и при этом экономим на размере индекса, не храним коды в базе.