2009-08-19 4 views
6

Ho bisogno di generare un ID record univoco per la stringa univoca data.cutdown uuid ulteriormente per creare una stringa breve

Ho provato a utilizzare il formato uuid che sembra essere buono.

Ma riteniamo che sia lungo.

quindi è necessario ridurre la stringa uuid 9f218a38-12cd-5942-b877-80adc0589315 in minore. Rimuovendo '-' possiamo salvare 4 caratteri. Qual è la parte più sicura da rimuovere da uuid? Non abbiamo bisogno di ID universalmente univoci, ma ci piace usare uuid come fonte, ma tagliare le stringhe.

Abbiamo bisogno di un ID univoco specifico per sito/database (servizi dati SQL Server/ADO.NET).

Qualsiasi idea o il campione da qualsiasi lingua va bene

Grazie in anticipo

risposta

3

Se si utilizza MS-SQL si dovrebbe probabilmente solo utilizzare il tipo di dati uniqueindentifier, è sia compatto (16 byte) e dal momento che il motore SQL lo sa Si può ottimizzare gli indici e le query di utilizzarlo.

+1

Un UUID è anche 16 byte, quindi questo non lo rende affatto più piccolo. –

+0

Glenn, uniqueindentifier == UUID, ma l'OP stava sicuramente parlando della memorizzazione come stringa. –

0

Un UUID ha 128 bit. Hai considerato di fare un CRC di esso? Ciò potrebbe facilmente ridurlo a 16 o 32 bit e utilizzare tutte le informazioni originali. Se un CRC non è abbastanza buono, puoi sempre usare i primi pochi byte di un hash corretto (SHA256, per esempio).

Se si desidera semplicemente ridurre l'UUID, il formato di esso è descritto in RFC 4122. Dovresti essere in grado di capire da quali parti la tua implementazione non ha bisogno.

+1

Un CRC non sarebbe affatto unico. –

+1

Dipende dalla quantità di unicità di cui ha bisogno. Ecco perché ho suggerito sia CRC che un'alternativa. –

+1

Sfortunatamente, non è possibile ridurre i bit grezzi dell'UUID senza togliere il suo stato di UUID. Questo perché ci devono essere 128 bit di casualità per essere considerati un UUID e ridurre sufficientemente la possibilità di una collisione vicino allo zero. –

2

Un UUID fornisce (quasi) 128 bit di unicità. Si può abbreviare a 16 byte binari o 22 caratteri con codifica Base64. Non raccomanderei di rimuovere alcuna parte di un UUID, altrimenti, perderà il suo senso. Gli UUID sono stati progettati in modo tale che tutti i 128 bit abbiano un significato. Se vuoi meno, dovresti usare qualche altro schema.

Ad esempio, se è possibile garantire che vengano utilizzati solo UUID versione 4, è possibile utilizzare solo i primi 32 bit o solo gli ultimi 32 bit. Perdi l'unicità, ma hai numeri piuttosto casuali. Basta evitare i bit che sono stati corretti (versione e variante).

Ma se non lo puoi garantire, avrai dei veri problemi. Per gli UUID versione 1, i primi bit non saranno univoci per gli UUID generati nello stesso giorno e gli ultimi bit non saranno univoci per gli UUID generati nello stesso sistema. Anche se CRC l'UUID, non è garantito che avrai 16 o 32 bit di unicità.

In questo caso, utilizzare solo un altro schema. Generare un numero casuale a 32 bit utilizzando il generatore di numeri casuali di sistema e utilizzarlo come ID univoco. Non fare affidamento sugli UUID se intendi ridurne la lunghezza.

2

L'UUID è di 128 bit o 16 byte. Senza codifica, è possibile ottenerla a partire da 16 byte. Gli UUID sono comunemente scritti in esadecimale, rendendoli stringhe leggibili a 32 byte.Con altre codifiche, si ottengono risultati diversi:

  1. base-64 giri 3 a 8-bit byte in 4 caratteri 6-bit, in modo da 16 byte di dati diventa 22 caratteri
  2. base-85 le svolte 4 8- bit byte in 5 caratteri a 6,4 bit, quindi 16 byte di dati diventano 20 caratteri

Tutto dipende da se si desidera che le stringhe leggibili e la codifica standard/comune si desideri utilizzare.