Guid что это в windows

Обновлено: 01.07.2024

Когда мы встречаемся с битой ссылкой в Предприятии 8, иногда возникает необхоимость создать объект с её идентификатором. Однако строка идентификатора и текст битой ссылки в предприятии различаются, но легко восстановить одно зная другое.

Определимся с обозначениями:

UUID - это подстрока, которую мы видим в режиме предприятия в представлении битой ссылки

Объект не найден (N: UUID );

где N - номер таблицы таблицы в базе данных, например, _ReferenceN - это таблица справочника в базе данных.

Для документа такая таблица будет иметь имя _Document N , разглядеть имена этих таблиц можно, если имеется клиент-серверный вариант информационной базы 1С:Предприятия (см. рис.).

GUID - это строка, которую мы используем для создания объекта "УникальныйИдентификатор":

Вот две простые функции, которые легко составить по предложенному рисунку:

Функция UUIDToGUID ( UUID ) Экспорт

Возврат Прав ( UUID , 8 ) + "-" + Сред ( UUID , 21 , 4 ) + "-" + Сред ( UUID , 17 , 4 ) + "-" + Лев ( UUID , 4 ) + "-" + Сред ( UUID , 5 , 12 );

Функция GUIDToUUID ( GUID ) Экспорт

Возврат Сред ( GUID , 20 , 4 ) + Прав ( GUID , 12 ) + Сред ( GUID , 15 , 4 ) + Сред ( GUID , 10 , 4 ) + Лев ( GUID , 8 );

Исходя из смысла числа N в строке битой ссылки Объект не найден (N:UUID), это число можно считать идентификатором типа.

Для определения типа можно заполнить заранее, например, соответствие (Число N - ТипОбъекта). А N определять из представления битой ссылки.

Вот функции модуля обработки для определения типа (всего одна экспортная функция для рашифровки битой ссылки):

// Представление битой ссылки: Объект не найден (TypeID:UUID)
// TypeID - идентификатор типа
// UUID - глобальный идентификатор
Функция СтруктураПредставленияБитойСсылки ( ПредставлениеБитойСсылки )

// Ищем позицию скбоки
Поз1 = Найти ( ПредставлениеБитойСсылки , "(" );
Поз2 = Найти ( ПредставлениеБитойСсылки , ":" );

Если Поз1 > 0 И Поз2 > 0 И Поз2 > Поз1 Тогда
TypeID = Сред ( ПредставлениеБитойСсылки , Поз1 + 1 , Поз2 - Поз1 - 1 );
UUID = Сред ( ПредставлениеБитойСсылки , Поз2 + 1 , 32 );
Иначе
TypeID = "" ;
UUID = ПредставлениеБитойСсылки ;
КонецЕсли;

Возврат Новый Структура ( "TypeID, UUID" , TypeID , UUID );

КонецФункции
// Возвращает соответствие: Идентификатор типа (строка) - Строка определения типа
Функция СоответствиеИдентификаторовТипов ()

Соответствие = Новый Соответствие ;

МассивКоллекцийМенеджеровСсылочныхОбъектов = Новый Массив ;
МассивКоллекцийМенеджеровСсылочныхОбъектов . Добавить ( Справочники );
МассивКоллекцийМенеджеровСсылочныхОбъектов . Добавить ( Документы );
МассивКоллекцийМенеджеровСсылочныхОбъектов . Добавить ( ПланыВидовХарактеристик );
МассивКоллекцийМенеджеровСсылочныхОбъектов . Добавить ( ПланыСчетов );
МассивКоллекцийМенеджеровСсылочныхОбъектов . Добавить ( БизнесПроцессы );
МассивКоллекцийМенеджеровСсылочныхОбъектов . Добавить ( Задачи );
МассивКоллекцийМенеджеровСсылочныхОбъектов . Добавить ( ПланыОбмена );

Для Каждого КоллекцияМенеджеровСсылочныхОбъектов Из МассивКоллекцийМенеджеровСсылочныхОбъектов Цикл
Для Каждого МенеджерСсылоногоОбъекта Из КоллекцияМенеджеровСсылочныхОбъектов Цикл
БитаяСсылка = МенеджерСсылоногоОбъекта . ПолучитьСсылку (Новый УникальныйИдентификатор );
Соответствие . Вставить ( СтруктураПредставленияБитойСсылки ( Строка ( БитаяСсылка )). TypeID , СтрЗаменить ( БитаяСсылка . Метаданные (). ПолноеИмя (), "." , "Ссылка." ));
КонецЦикла;
КонецЦикла;

КонецФункции
// Возвращает структуру: "TypeID, UUID, Тип, GUID"
Функция РасшифровкаПредставленияБитойСсылки ( ПредставлениеБитойСсылки ) Экспорт

Если мСоответствиеИдентификаторовТипов = Неопределено Тогда
мСоответствиеИдентификаторовТипов = СоответствиеИдентификаторовТипов ();
КонецЕсли;

СтруктураПредставления = СтруктураПредставленияБитойСсылки ( ПредставлениеБитойСсылки );

СтрокаТипа = мСоответствиеИдентификаторовТипов [ СтруктураПредставления . TypeID ];
Если СтрокаТипа = Неопределено Тогда
СтрокаТипа = "Неопределено" ;
КонецЕсли;

Возврат Новый Структура ( "TypeID, UUID, Тип, GUID" , СтруктураПредставления . TypeID , СтруктураПредставления . UUID , СтрокаТипа , UUIDToGUID ( СтруктураПредставления . UUID ));

Если вы в Windows 10 будете создавать новый диск, то более чем вероятно, Вам будет предложено, хотите ли вы использовать структуру разделов MBR или GPT. Если вы когда-либо хотели узнать больше о них, то продолжайте читать. В этом посте, Вы увидите, что такое раздел GPT и как он соотносится с MBR-дисками, а также как форматировать, удалять и как преобразовать GPT-диск в MBR-диск. Таблица разделов с кодами GUID (GPT), представляет собой стандарт для разметки разделов на жёстком диске и использует уникальные идентификаторы.


Ограничения MBR-дисков

MBR-диск может иметь только четыре первичных раздела и может управлять данными только до 2ТБ. Так как потребности в хранении данных растут, Таблица разделов GUID илиGPT диски теперь будут продаваться с новыми компьютерами, которые могут адресовать более 2ТБ для хранения данных. MBR-диски оставляют за собой первый сектор HDD для хранения информации о разделах дисков и о расположении файлов операционной системы.

Другими словами, для правильной работы диска прошивки и операционная система опираются на первый сектор. Если MBR повреждён, то вы можете потерять доступ к данным на диске.

В случае с GPT-дисками, на диске информация реплицируется более чем один раз, и, следовательно, такие диски работают, даже если первый сектор будет поврежден. GPT-диск может иметь до 128 основных разделов.

Устаревшие операционные системы не поддерживают GPT-диски, но почти во всех современных операционных системах, начиная с Windows XP 64-разрядная и Windows 10, они уже начали использовать поддержку дисков GPT.

Диск с MBR и GPT-диск

Основные пункты сравнения между дисками MBR и GPT являются следующие:

1. MBR-диск содержит не более четырёх первичных разделов, а диски с GPT могут иметь до 128 основных разделов.

2. Если вам нужно больше, чем четыре секции, вы должны создать дополнительный раздел на MBR-диске, а затем создать логические разделы принимая во внимание, что в GPT-дисках, нет такого давления.

3. Первый сектор и только первый сектор MBR-диска содержит информацию о жестком диске, а в GPT-дисках, информация о жестком диске и его разделах реплицируются более чем один раз, так что он будет работать, даже если первый сектор поврежден.

4. MBR-диск не сможет управлять дисками более 2 Тб ёмкости и нет такого ограничения с GPT-дисками.

5. Все операционные системы поддерживают MBR-диски в то время как GPT-диск, только для Windows XP 64 бит и версии совместимые с такой таблицей Windows .

6. Для поддержки загрузки Windows 8, которая поддерживает 32-битную загрузку, всё происходит немного по другому, чем во всех предыдущих версиях, таких как Windows 7 32-разрядные версии, она не может загружаться с GPT-диска.

Как преобразовать GPT-диск в MBR-диск

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

Теперь вы можете создавать разделы с помощью обычной команды или бесплатного программного обеспечения стороннего менеджера разделов, таких как программа Free third-party partition manager software such или EaseUS Partition Tool.

Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.

Представляет глобальный уникальный идентификатор (GUID).

Примеры

Обратите внимание, что GuidAttribute атрибут обычно используется в приложении для предоставления типа COM. При компиляции этого примера можно запустить средство регистрации сборок (Regasm.exe) для созданной сборки, чтобы создать файлы реестра (REG) и библиотеки типов (TLB). REG-файл можно использовать для регистрации компонентного класса в реестре, а файл. tlb может предоставлять метаданные для взаимодействия COM.

Комментарии

Конструкторы

Инициализирует новый экземпляр структуры Guid с использованием указанного массива байтов.

Инициализирует новый экземпляр структуры Guid с использованием заданных целых чисел и байтов.

Инициализирует новый экземпляр структуры Guid с использованием заданных целых чисел и массива байтов.

Инициализирует новый экземпляр структуры Guid с использованием значения, представленного заданным диапазоном байтов только для чтения.

Инициализирует новый экземпляр структуры Guid с использованием значения, представленного заданной строкой.

Инициализирует новый экземпляр структуры Guid с использованием указанных целых чисел без знака и байтов.

Доступный только для чтения экземпляр структуры Guid, значение которой состоит только из нулей.

Методы

Сравнивает этот экземпляр с заданным объектом Guid и возвращает значение, указывающее, как соотносятся значения этих объектов.

Сравнивает этот экземпляр с заданным объектом и возвращает значение, указывающее, как соотносятся значения этих объектов.

Возвращает значение, позволяющее определить, представляют ли этот экземпляр и заданный объект Guid одно и то же значение.

Возвращает значение, показывающее, равен ли экземпляр указанному объекту.

Возвращает хэш-код данного экземпляра.

Инициализирует новый экземпляр структуры Guid.

Преобразует диапазон символов только для чтения, представляющий GUID, в эквивалентную структуру Guid.

Преобразовывает строковое представление объекта GUID в эквивалентную структуру Guid.

Преобразует диапазон символов, представляющих GUID, в эквивалентную структуру Guid, при условии, что строка имеет указанный формат.

Преобразует строковое представление GUID в эквивалентную структуру Guid, при условии, что строка имеет указанный формат.

Возвращает массив байтов из 16 элементов, содержащий значение данного экземпляра.

Возвращает строковое представление значения этого экземпляра в формате реестра.

Возвращает строковое представление значения этого экземпляра Guid в соответствии с заданным описателем формата.

Возвращает строковое представление значения этого экземпляра класса Guid в соответствии с заданным описателем формата и сведениями об особенностях форматирования, связанных с языком и региональными параметрами.

Пытается отформатировать текущий экземпляр GUID в указанный диапазон символов.

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

Преобразовывает строковое представление объекта GUID в эквивалентную структуру Guid.

Преобразует диапазон символов, представляющий GUID, в эквивалентную структуру Guid, при условии, что строка имеет указанный формат.

Преобразует строковое представление GUID в эквивалентную структуру Guid, при условии, что строка имеет указанный формат.

Пытается записать текущий экземпляр GUID в диапазон байтов.

Операторы

Указывает, равны ли значения двух указанных объектов Guid.

Указывает, верно ли, что значения двух указанных объектов Guid не равны.

Явные реализации интерфейса

Сравнивает этот экземпляр с заданным объектом Guid и возвращает значение, указывающее, как соотносятся значения этих объектов.

Возвращает строковое представление значения этого экземпляра в соответствии с заданным описателем формата и сведениями об особенностях форматирования, связанных с языком и региональными параметрами.

Пытается отформатировать значение текущего экземпляра в указанный диапазон символов.

Зачастую, когда разработчики сталкиваются с созданием модели данных, тип первичного ключа выбирается «по привычке», и чаще всего это автоинкрементное целочисленное поле. Но в реальности это не всегда является оптимальным решением, так как для некоторых ситуаций более предпочтительным может оказаться GUID. На практике возможны и другие, более редкие, типы ключа, но в данной статье мы их рассматривать не будем.

Ниже приведены преимущества каждого из вариантов.

  • Занимает меньший объем
  • Теоретически, более быстрая генерация нового значения
  • Более быстрая десериализация
  • Проще оперировать при отладке, поддержке, так как число гораздо легче запомнить
  • При репликации между несколькими экземплярами базы, где добавление новых записей происходит более, чем в одну реплику, GUID гарантирует отсутствие коллизий
  • Позволяет генерировать идентификатор записи на клиенте, до сохранения ее в базу
  • Обобщение первого пункта — обеспечивает уникальность идентификаторов не только в пределах одной таблицы, что для некоторых решений может быть важно
  • Делает практически невозможным «угадывание» ключа в случаях, когда запись можно получить, передав ее идентификатор в какой-нибудь публичный API

GUID можно генерировать как на клиенте, так и самой базой данных — уже два варианта. К тому же, в MS SQL есть две функции для получения уникального идентификатора — NEWID и NEWSEQUENTIALID. Давайте разберемся, в чем их отличие и может ли оно быть существенным на практике.

Если использовать Entity Framework Code First, и объявить первичный ключ вот таким образом


в базе данных будет создана таблица с первичным кластерным ключом, который имеет значение по умолчанию NEWSEQUENTIALID(). Сделано это из соображений производительности. Опять же, в теории, вставлять новое значение в середину списка более накладно, чем добавление в конец. База данных, конечно же, не массив в памяти, и вставка новой записи в середину списка строк не приведет к физическому сдвигу всех последующих. Тем не менее, дополнительные накладные расходы будут — разделение страниц (page split). По итогу также будет сильная фрагментация индексов, которая может отразиться на производительности выборки данных. Неплохое объяснение того, как происходит вставка данных в кластеризованую таблицу, можно найти в ответах форума по этой ссылке.


Обратите внимание на то, что без специальной перестановки байт, GUID нельзя отдавать. Идентификаторы получатся корректные, но с точки зрения SQL сервера — непоследовательные, поэтому никакого выигрыша по сравнению с «обычным» GUID даже теоретически не получится. К сожалению, ошибочный код приведен во многих источниках.

К списку остается добавить пятый вариант — автоинкрементный первичный ключ. Других вариантов у него нет, так как на клиенте его генерировать нормально не получится.

С вариантами определились, но есть еще один параметр, который следует учесть при написании теста — физический размер строк таблицы. Размер страницы данных в MS SQL — 8 килобайт. Записи близкого или даже большего размера могут показать более сильный разброс производительности для каждого из вариантов ключа, чем на порядок меньшие записи. Чтобы обеспечить возможность варьировать размер записи, достаточно добавить в каждую из тестовых таблиц NVARCHAR поле, которое затем заполнять нужным количеством символов (один символ в NVARCHAR поле занимает 2 байта).

Тестирование

По этой ссылке находится проект с программой, которая была разработана с учетом указанных выше соображений.

Читайте также: