#0
by itPiligrim
Разрабатываю конфу. В силу предметной области встала необходимость сделать длину кода справочника 36 символов. Знаю, что больше 11 не рекомендуется. Сложных запросов к этому справочнику не будет, но вот НайтиПоКоду будет очень часто использоваться. Повел тестирование на 100 тыс. элементах (больше маловероятно, что будет в реальных условиях). Получение объекта справочника через Найти По коду проходит очень быстро за 0,009002. Меня устраивает. Так почему же пишут, что большая длина кода плохо? Где может таиться опасность?
#2
by itPiligrim
А какая разница? Искать по коду или по реквизиту??? Только дополнительный лишний индекс будет, так как придется этот реквизит индексировать. Принципиальной разницы не вижу. Плюс для кода есть автоматический контроль уникальности....
#4
by itPiligrim
В коде хранится уникальный идентификатор. Понятно, почему именно 36 :) В этот справочник будет сливаться информация из разных других баз, при этом этих баз потенциально может быть очень много и невозможно проконтролировать какие коды будут вводить пользователи, да и вообще заранее неизвестно про них ничего, так что трюк с префиксом как для распределенной БД не пройдет.
#5
by Худой
Да это понятно, что уникальный идентификатор. Он может быть и из 5 символов уникальным. С какого перепугу такой длины код фигачить то? Ты его состав можешь описать?
#6
by itPiligrim
Я его получаю через GUID = Новый УникальныйИдентификатор; А как иначе гарантировать с большой долей вероятности уникальность записей в распределенных базах про которые ничего не знаешь.
#8
by Defender aka LINN
О_о ГУИД - это Гарантированый Уникальный ИДентификатор. ГАРАНТИРОВАНЫЙ. И, по заверениям разработчиков, будет таковым до 3100 примерно года.
#9
by masky
правда? потому что на текстовых полях индексы большие сильно. и ищется медленнее чем на бинарных. guid у нормальных людей имеет тип varbinary..
#11
by Худой
Ну получишь ты этот самый GUID. И что тебе с ним дальше делать? Ты хоть подумал об этом? Для чего он тебе, поясни публике.
#12
by masky
а вот что разработчики говорят :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
#14
by masky
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.
#16
by itPiligrim
А нужен это GUID, чтобы можно было делать ссылки по нему из разных мест, например в HTML странице, в произвольных XML и т.д., там где ссылочная целостность естественно не поддерживается.
#18
by GStiv
может проще завести регистр сведений, по типу штрихдода в котором будет храниться нужная вам информация
#19
by itPiligrim
Для того, чтобы делать ссылки.... Для чего делают ссылки? Чтобы получить объект из базы по его коду.... Но эти объекты создаются в разных местах, а не в одной базе или заранее известном наборе баз.
#21
by Туц
Налицо спор по двум позициям 1. Уникальность GUID 2. Скорость поиска по индексам По первому: шанс повторения GUID на разных компьютерах очень мал. На столько мал, что можно сказать "Совпадение GUID невозможно". Мы имеем 4,9732323640978664215538224814682e+86 возможных значений. 2. Копайте в сторону реализации поиска по индексам на уровне dll-ок 1с-ки. Если не знаете как, то разговор беспредметный.
#23
by masky
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'и клиента?
#25
by itPiligrim
Совершенно верно, но при тестировании на 100 тыс. записей скорость устраивает. Но от чего еще зависит скорость? Тестовая база в файловом варинте была 3,5 GB и состояла из 100 тыс. записей в тестируемом справочнике и 35 тыс записей в одном регистре сведений, он имеет связь с этим справочником. Тестировал поиск по справочнику и регистру. Скорость устраивает. Но будут ли проблемы при реальном использовании? Какие могут быть подводные камни? От чего еще зависит скорость?
#26
by Худой
Вот. Приходим к тому, от чего ушли - "Для чего делают ссылки? Чтобы получить объект из базы по его коду". А как ты будешь указывать из какой базы эту ссылку брать?
#35
by AntonioS
есть другая идея. не хранить идентификатор объектов других баз в коде, а формировать элемент справочника как ссылку, имеющую тот же идентификатор, что и объект другой базы. Т.е. если есть строка идентификатора СтрокаGUID, то создавать элемент с помощью метода ПолучитьСсылку(Новый УникальныйИдентификатор(СтрокаGUID)). Этим же методом можно и искать элемент. Смысл в том, что внутренние ссылки у элементов в интергационной базе будут такими же как и ссылки элементов других баз.
#36
by Худой
Черт с этими гуидами. Это ерунда. Я не могу понять, где и как афтар сбирается искать эти объекты?
#39
by itPiligrim
Ну допустим простой пример. Внешнее приложение обращается к базе 1С и говорит: найди мне объект имеющий этот GUID и верни мне его свойства. Есть еще варианты....
#40
by AntonioS
если ты ищешь по строке гуида, то НайденнаяСсылка = Справочники.ОбъектыДругихБаз.ПолучитьСсылку(Новый УникальныйИдентификатор(СтрокаGUID)). насколько это быстрее или медленнее поиска по коду - не знаю. можно предполагать, что по причине, указанной в будет быстрее, чем по коду искать
#41
by Худой
Ты представляешь себе, откуда внешнее приложение будет знать этот самый гуид? Чего мозгу то парить? Прокрути, для начала, не абстрактные ситуации. А то разворошил народ с этими самыми гуидами.
#42
by itPiligrim
Блин у меня уже есть прототип. Для чего мне это нужно вопрос не ставится, не буду же я все на форуме рассказывать что за конфа для какой компании и т.д. Меня интересует как сделать лучше, чем есть сейчас.
#44
by itPiligrim
Конструктивная идея, надо попробовать, сравнить. Первая разумная идея, спасибо AntonioS.
#45
by Худой
ок. Как хош. Тогда присоединяюсь к . И, вообще, правильнее было бы держать не справочник, а регистр сведений. В который заносить код объекта метаданных, код самого объекта и код базы, в которойискать этот объект. Например Документ.Выписка,"000131","База1" Справочник.Номенклатура,"00657","База4" ..... Документ.Счет,"43267","База1" и т.д.
#47
by AntonioS
не на чем. если бы у меня была такая конкретная задача, я бы наконец собрался посмотреть 1С:Интеграция. Наверное, там много полезных идей. А так все руки не доходят. :)
#48
by Худой
Я тоже думаю, что это бред сивой кобылы. Просто афтар ссылается на уже готовый функционал. Который, мне кажется, тоже такой же бредовый, как и идея с гуидом.
#49
by itPiligrim
Повторюсь, мы не знаем эти базы заранее, сложно представить, но это так. Вариант AntonioS посмотрел работает отлично, мне нравится. В принципе скорость чуть-чуть быстрее, но решение зато красивое.
#51
by AntonioS
я несколько не понял. все таки по производительности что быстрее по коду искать или по ссылке? если есть замеры, то интересно узнать насколько.
#52
by itPiligrim
По ссылке быстрее: Замеры такие: По коду: 5000 элементов - время 0,008349 100000 элементов - время в пределах от 0,009002 до 0,02, для разных элементов справочника, видимо на скорость влияют разные факторы. По ссылке: 100000 эл. - время стабильно в районе 0,008, и при этом экономим на размере индекса, не храним коды в базе.
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям
Похожие вопросы 1С
- Максимальная длина строки в "восьмерке"
- ДЛина кода справочника
- Длина наименования файла дбф
- Почему в типовой УТ длина кода справочников 5 ?
- Длина кода номенклатуры в тис 8, при создании новой формирутет 7 убирая нули в начале кода?
- v7: Максимальная длина имени справочника 1С 7.7
- v7: Длина кода номенклатуры
- Длина пин кода 1с8 на бумажке 16 символов а при установке 15 только можно ввести
В этой группе 1С
- Вывести отрицательно красным
- Консоль отчетов. Номер по порядку.
- Отбор по типу документа в запросе
- v7: ТиС продажа собственной фирме
- Вычисляемые периоды виртуальной таблицы
- Создание пользователя SQL SERVER
- Непомерно разрослась база УПП на SQL
- Как изменить номер сообщения отправляемого узлом обмена?
- ошибка sdbl: попытка быстрой вставки значения недопустимого типа (pos=24)
- Как добавить новый регистр сведений в хранилище?
- Представление числа в виде суммы степеней двойки
- Как В ЗиК грамотно убирать начальное сальдо?
- Установить отбор
- Разность дат! Как посчитать разность дат и вывести значение в месяцах?
- v8: Проведение документов на сервере 1С
- Виртуальные таблицы (Запросы)
- УстановитьЗначениеВПодборе("Склад",Склад);
- УПП. Схема с использ 40 счета. Помогите с отражением отклонений в себестоим
- Работа с запросами
- Как добавить ИТОГО в конце страницы отчета если высота строк переменная?