Является ли кодирование типа объекта в верхних нескольких битах идентификатора 64 лучше, чем guid? - PullRequest
1 голос
/ 29 января 2011

ПОЧЕМУ

  • Мне бы хотелось иметь уникальные идентификаторы для всех объектов в моей системе.
  • Возможность идентифицировать владельца по "типу" формы будет отличной, даже лучше, если мне не придется нажимать на БД.

1012 * GUID *

ВНИЗ:

  • Не могу сказать тип без запроса дБ.

СКРЫВАЯ ТИП В ТОП-Х БИТОВ

Давайте признаем, что 64 бита никогда не закончатся. Идея состоит в том, чтобы использовать, возможно, верхние, скажем, биты X для кодирования «типа» объекта. Это будет означать, что идентификаторы будут исключительно большими.

ПРИМЕЧАНИЯ

  • Верхние биты маскируются и очищаются для получения истинного идентификатора для дБ.

ИБП

  • Может легко определить тип идентификатора, проверяя правильные биты.

ТИП КОДИРОВАНИЯ В НИЖЕ Х БИТОВ

Вместо того, чтобы кодировать в верхних битах, сдвигать истинный идентификатор и кодировать в младших битах. Если я хочу зарезервировать 5 битов для «типов», тогда истинный идентификатор 3 + тип идентификатора X окажется 5 + 3 << X. </p>

ПРИМЕЧАНИЯ

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

DOWNS

  • Если мне понадобится больше, чем X бит для типов на более позднем этапе, тогда мне нужно будет закодировать оставшиеся биты в верхнем конце 64-битного значения.

UPS

  • Нет необходимости запрашивать базу данных, чтобы определить «тип» сущности по id.

МНЕНИЯ

Какой вариант лучше? Мне лично нравится последний вариант, выбор хорошего размера для X оставляет достаточно места для расширения без чрезмерно больших идентификаторов.

Ответы [ 2 ]

1 голос
/ 29 января 2011

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

Кроме того, для небольшого количества типов можно привыкнуть к диапазонам, используемым для каждого типа, и через некоторое время вы просто узнаете тип, посмотрев на идентификатор, что может быть полезно при отладке!

0 голосов
/ 29 января 2011

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

Однако для теста данных я явно указал GUID ивложил эти знания и в инфраструктуру тестового кода.GUID каждого объекта в основном представлял собой комбинацию «номера типа» и счетчика количества созданных объектов.Это облегчило понимание тестовых данных: если что-то пошло не так, было гораздо проще найти «сущность X номер 3», чем пытаться найти произвольный GUID.

...