Frage

Ich brauche für den gegebenen eindeutigen String eindeutige Datensatz-ID zu erzeugen.

Ich habe versucht, UUID-Format, das gut zu sein scheint.

Aber wir glauben, dass lengthly ist.

so müssen wir die UUID-String 9f218a38-12cd-5942-b877-80adc0589315 zu kleiner cutdown. Durch das Entfernen ‚-‘ können wir 4 Zeichen speichern. Was ist der sicherste Teil von UUID zu entfernen? Wir brauchen keine UUID aber wir möchten UUID als Quelle verwenden, aber Strings abgeholzt.

Wir brauchen eindeutige ID spezifisch Website / Datenbank (SQL Server / ADO.NET Data Services).

Jede Idee oder Probe aus jeder Sprache ist in Ordnung

Vielen Dank im Voraus

War es hilfreich?

Lösung

Warum nicht statt umbauen es an einer Basis 64 String? Sie können es auf diese Weise zu 22 Zeichen abgeholzt.

Speicher UUID als base64 String

Andere Tipps

Wenn Sie MS-SQL verwenden, sollten Sie wahrscheinlich nur die uniqueindentifier Datentyp verwenden, ist es kompakt (16 Bytes), und da die SQL-Engine über sie kennt, kann es optimieren Indizes und Abfragen, die er verwendet wird.

Ein UUID bietet (fast) 128 Bits von Einzigartigkeit. Sie können es auf 16 Binärbytes verkürzen oder 22 Base64-codierte Zeichen. Ich würde nicht empfehlen, jeden Teil eines UUID zu entfernen, andernfalls verliert er nur seinen Sinn. UUIDs wurden so konzipiert, dass alle 128 Bit Bedeutung haben. Wenn Sie als die weniger wollen, sollten Sie ein anderes Schema verwenden.

Zum Beispiel, wenn Sie diese nur Version 4 UUID verwendet werden, garantieren könnten, dann könnte man nur die ersten 32 Bits nehmen, oder einfach nur die letzten 32 Bits. Sie verlieren Einzigartigkeit, aber Sie haben recht Zufallszahlen. Vermeiden Sie einfach die Bits, die behoben werden (Version und Variante).

Aber wenn Sie das nicht garantieren können, werden Sie echte Probleme haben. Für die Version 1 UUIDs, werden die ersten Bits für UUIDs im selben Tag generiert werden nicht einzigartig, und die letzten Bits werden nicht für UUIDs erzeugt im gleichen System eindeutig sein. Selbst wenn Sie die UUID CRC ist es nicht garantiert, dass Sie 16 oder 32 Bit Einzigartigkeit haben wird.

In diesem Fall nur ein anderes Schema verwenden. Erzeugen Sie eine 32-Bit-Zufallszahl das System Zufallszahlengenerator und verwenden, die als eindeutige ID. Nicht auf UUIDs verlassen, wenn Sie auf Abstreifen seiner Länge möchten.

Die UUID 128 Bits oder 16 Bytes. Ohne Codierung, können Sie es als 16 Bytes so günstig bekommen. UUIDs sind häufig in hexadezimal geschrieben, so dass sie 32-Byte-lesbaren Zeichenketten zu machen. Mit anderen Codierungen, erhalten Sie unterschiedliche Ergebnisse:

  1. base-64 dreht 3 8-Bit-Bytes in 4 6-Bit-Zeichen, also 16 Bytes von Daten 22 Zeichen lang werden
  2. base-85 dreht 4 8-Bit-Bytes in 5 6,4-Bit-Zeichen, also 16 Bytes von Daten 20 Zeichen lang werden

Es hängt alles davon ab, ob Sie lesbaren Zeichenketten wollen und wie Standard / common eine Codierung Sie verwenden möchten.

Ein UUID hat 128 Bit. Haben Sie darüber nachgedacht eine CRC, es zu tun? Das könnte es leicht auf 16 oder 32 Bit herunterkommen, und würde alle ursprünglichen Informationen verwenden. Wenn ein CRC nicht gut genug ist, können Sie immer die ersten paar Bytes einer geeigneten Hash verwenden (SHA256, zum Beispiel).

Wenn Sie wirklich wollen einfach nur die UUID abgeholzt, wird das Format davon beschrieben in RFC 4122 . Sie sollten in der Lage sein, herauszufinden, welche Teile Ihrer Implementierung nicht aus, dass muss.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top