Как вы генерируете UUID типа long (64 бит - для использования программой java) с использованием Python?
Я читал о модуле UUID . Поэтому я немного поиграл с ним:
>>> import uuid
>>> uuid.uuid1().int
315596929882403038588122750660996915734L
Почему существует " L" в конце целого числа, сгенерированного с помощью uuid.uuid1(). int? Если это целое число не должно состоять из чистых чисел?
Также в соответствии с документацией uuid.uuid1(). int будет генерировать 128-битное целое число. Мне нужно целое число длинное (для java-программы), что означало бы, что оно должно быть 64 бита. Возможно ли сгенерировать UUID из 64 бит вместо 128 бит?
Другая проблема заключается в том, что в соответствии с Python doc Python int составляет 32 бита, а Python long имеет "неограниченную точность". Что означает "неограниченная точность"? Мне нужен 64-битный длинный int - какой тип Python будет?
EDIT: Спасибо за ответы. Похоже, UUID по определению 128 бит. В этом случае я, вероятно, не должен использовать термин UUID. Я хочу сделать, чтобы создать уникальный идентификатор типа long (64 бит). Я думал, что UUID выполнит эту работу, но похоже, что это невозможно.
Мне нужен этот идентификатор в качестве идентификатора документа для поисковой системы Solr. Я использую плагин Solr для индексирования в реальном времени Zoie. И согласно документации, "Zoie предполагает, что каждая зарегистрированная запись должна иметь уникальный ключ и тип длинный."
Итак, учитывая, что мне нужно, знаете ли вы, что я могу сделать, чтобы генерировать уникальный идентификатор типа long?
Спасибо!
В зависимости от того, насколько вам это необходимо, вы можете создать свою собственную форму UUID, которая является скорее уникальным идентификатором машины, а не универсальным уникальным идентификатором. например нужно ли быть уникальным на разных компьютерах? или просто находится на одном компьютере в порядке?
Если только уникальная на одной платформе, вы можете уйти с удалением раздела id node в конце. то есть последние 6 байтов.
Кроме того, вам может понравиться, как часто генерируются эти числа. раз в секунду макс? или очень часто?
Посмотрите здесь, как генерируется UUID, и вы увидите, что я имею в виду. http://tools.ietf.org/id/draft-leach-uuids-guids-01.txt
Вероятно, вы можете свернуть свою версию для своей ситуации и все же выполнить свое требование и легко вписаться в 64 бит.
Кстати, L символизирует длинный int, который обычно означает длину 64 бит, а не 32 по умолчанию на большинстве машин. Это то, что происходит, когда вы печатаете число, но внутри оно не имеет значения L в нем.
sys.maxint
L не означает 64-битный, это просто означает, что он больше, чем sys.maxint
(который зависит от машины). В Python int
- это размер sys.maxint
(обычно 32-битный или 64-битный в зависимости от вашей машины), а long
- это «неограниченный» размер (пока у вас не закончится память :))
L
означает, что это длинное целочисленное значение (больше 32 бит).
Стандартные UUID всегда 128 бит; если вы хотите что-то, что только 64 бит, вам нужно либо использовать только часть UUID, либо использовать что-то другое, кроме UUID.
Одна точка для добавления, даже Java UUID имеет длину 128 бит. Если вы собираетесь использовать его на Java, вы должны сделать его 128-битным, а не 64. http://download-llnw.oracle.com/javase/1.5.0/docs/api/java/util/UUID.html
Определение запаса UUID составляет 128 бит.
Я бы сказал, что 64 бит недостаточно для обеспечения несинхронизированной уникальности.
ints
действуют также, а не только вlongs
.