So erzeugen Sie eine UUID vom Typ long (verzehrt zu werden von einem java-Programm in Python?
Wie generieren Sie die UUID des Typs long (64-bits - konsumiert werden von einem java-Programm mit Python?
Lese ich über die UUID-Modul. Also ich spielte mit ihm ein wenig:
>>> import uuid
>>> uuid.uuid1().int
315596929882403038588122750660996915734L
Warum ist es ein "L" am Ende der integer generated by uuid.uuid1().int? Wenn es ein integer-sollte es nicht aus reinen zahlen?
Auch nach der Dokumentation der uuid.uuid1().int erzeugt einen 128-bit integer. Ich brauche eine Ganzzahl vom Typ long (für ein java-Programm), das würde bedeuten es müssen 64 bit sein. Ist es möglich, zum erzeugen einer UUID 64 bit anstelle von 128 bit?
Ein weiteres problem ist, dass nach dem Python-doc ein Python int ist 32 bit, während eine Python lang hat "unbegrenzte Präzision." Was bedeutet "unbegrenzte Präzision" bedeuten? Brauche ich ein 64 bit long int - welche Python-Typ wäre das?
EDIT:
Vielen Dank für alle Antworten. Sieht aus wie UUID ' s sind per definition 128 bits. In diesem Fall habe ich wahrscheinlich sollte nicht mit dem Begriff UUID. Was ich will zu tun ist, um generiert eine eindeutige ID, die vom Typ long (64 bits). Ich dachte UUID würde die Arbeit machen, aber es sieht aus wie es nicht geht.
Muss ich, dass ID die Dokumenten-ID für die Solr Suchmaschine. Ich bin mit einem Echtzeit-Indexierung Solr-plugin Zoie. Und laut der Dokumentation "Zoie übernimmt jeder Datensatz indiziert werden, muss eine eindeutigen Schlüssel und der Typ lange."
So gegeben, das ist, was ich brauche, weißt du, was ich tun kann, um eine eindeutige ID vom Typ long?
Danke!
- "unendliche Präzision" bedeutet, es ist wie ein BigInteger in Java. Der Daten-Typ wird nicht von einer festen Länge, aber es kann wachsen, um Platz für ganze zahlen so groß, wie Sie wollen (bis Sie laufen out of memory).
- Hinzufügen thilos Kommentar auf "unbegrenzte Präzision", die häufiger name ist Arbitrary-precision Arithmetic. In Python 3.x, regelmäßigen
ints
handeln auch auf diese Weise, nicht nurlongs
. - Wie bereits beantwortet, L ist nur die interne Darstellung, um zu zeigen, es ist größer als 32bit. Wenn Sie mit einem regulären print-Anweisung
print(uuid.uuid1().int)
Sie nicht sehen, den L
Du musst angemeldet sein, um einen Kommentar abzugeben.
Je nachdem, wie einzigartig Sie es brauchen, können Sie generieren Ihre eigene form der UUID, dass ist eher ein Maschine Breite eindeutige ID statt einer universally unique - ID (d.h. es kann nicht eindeutig sein, auf Computern, sondern auf einem computer ist in Ordnung).
Wenn die ID muss nur einmalig auf der einen Plattform, die Sie bekommen können entfernt mit dem entfernen der Knoten-id finden Sie am Ende (die letzten 6 bytes).
Darüber hinaus könnten Sie überlegen, wie oft diese zahlen generiert werden. Sind Sie einmal erstellt pro Sekunde max oder sehr Häufig? Schauen Sie hier, wie eine UUID generiert wird, und du wirst sehen was ich meine: http://tools.ietf.org/id/draft-leach-uuids-guids-01.txt
Können Sie wahrscheinlich Rollen Sie Ihre eigene version für Ihre situation und die noch immer Ihre Anforderung zu erfüllen und passen in 64 bit problemlos.
Übrigens, das "L" symbolisiert ein long int, das bedeutet in der Regel 64-bit-Länge, anstatt 32-bit. Es ist nur angehängt, wenn Sie drucken die Anzahl.
sys.maxint
(die je nach Maschine). In Pythonint
ist die Größe dersys.maxint
(in der Regel 32-bit-oder 64-bit-abhängig von deiner Maschine), und einelong
ist "unlimited" - Größe (bis Sie laufen aus der Erinnerung 🙂 )Den
L
bedeutet, dass es ein long integer-Wert (größer als 32 bit).Standard UUIDs sind immer 128 bits; wenn Sie wollen etwas, dass nur 64 bit ist, müssen Sie entweder verwenden Sie nur ein sub-Teil einer UUID, oder verwenden Sie etwas anderes als eine UUID.
sqrt(2**64)
ist2**32
, d.h., über 4 Milliarden)Die Börse definition von UUID ist 128 bits.
Ich würde Wetten, dass 64 bit ist nicht genug, zu garantieren, nicht synchronisiert Einzigartigkeit.
Einen Punkt hinzufügen, auch Java-UUID ist eine 128-bit lang.
Wenn Sie gehen zu müssen, es verbraucht von Java, du musst machen es 128-bit lang, anstelle von 64.
http://download-llnw.oracle.com/javase/1.5.0/docs/api/java/util/UUID.html