Domanda

Ho bisogno di generare unico ID record per il dato stringa univoca.

Ho provato ad utilizzare formato UUID che sembra essere buona.

Ma sentiamo che è lengthly.

così abbiamo bisogno di cutdown la stringa uuid 9f218a38-12cd-5942-b877-80adc0589315 ai più piccoli. Rimuovendo '-' siamo in grado di salvare 4 caratteri. Qual è la parte più sicuro per rimuovere dalla UUID? Non abbiamo bisogno di id univoco universale, ma ci piace usare uuid come fonte, ma ridurre le stringhe.

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

Qualche idea o il campione da qualsiasi lingua va bene

Grazie in anticipo

È stato utile?

Soluzione

Perché non invece solo convertirlo in una stringa di 64 di base? È possibile tagliare verso il basso a 22 caratteri in quel modo.

Memorizzazione UUID come stringa Base64

Altri suggerimenti

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

Un UUID fornisce (quasi) 128 bit di unicità. Si può accorciare a 16 byte binari, o 22 caratteri base64-encoded. Non vorrei raccomandare la rimozione di qualsiasi parte di un UUID, in caso contrario, è solo perde il suo senso. UUIDs sono stati progettati in modo che tutti i 128 bit hanno significato. Se si vuole di meno, si dovrebbe utilizzare un altro schema.

Ad esempio, se si potesse garantire che solo la versione vengono utilizzati 4 UUID, allora si potrebbe prendere solo i primi 32 bit, o solo gli ultimi 32 bit. Si perde l'unicità, ma si hanno numeri abbastanza casuali. Solo evitare i bit corretti (versione e variante).

Ma se non si può garantire che, si avranno problemi reali. Per la versione 1 UUID, i primi bit non sarà unica per UUID generati nello stesso giorno, e gli ultimi bit non saranno unici per UUID generati nello stesso sistema. Anche se si CRC l'UUID, non è garantito che si avrà 16 o 32 bit di unicità.

In questo caso, basta usare qualche altro schema. Generare un numero casuale a 32 bit utilizzando il sistema di generatore di numeri casuali e utilizzarla come il vostro ID univoco. Non fare affidamento su UUID se si ha intenzione di nudo la sua lunghezza.

L'UUID è di 128 bit o 16 byte. Senza alcuna codifica, si potrebbe ottenere a partire da 16 byte. UUID sono comunemente scritti in esadecimale, che li rende 32 byte stringhe leggibili. Con altre codifiche, si ottengono risultati diversi:

  1. base 64 giri 3 byte di 8 bit in 4 caratteri 6 bit, quindi 16 byte di dati diventa 22 caratteri
  2. base-85 trasforma 4 byte di 8 bit in 5 caratteri 6.4 bit, quindi 16 byte di dati diventa 20 caratteri

Tutto dipende se si desidera che le stringhe leggibili e come norma / comune una codifica che si desidera utilizzare.

Un UUID ha 128 bit. Avete preso in considerazione di fare un CRC di esso? Questo potrebbe farlo fino a 16 o 32 bit con facilità, e avrebbe usato tutte le informazioni originali. Se un CRC non è abbastanza buono, si può sempre utilizzare i primi byte di un hash corretta (SHA256, per esempio).

Se davvero si vuole tagliare proprio in fondo alla UUID, il formato di esso è descritto in RFC 4122 . Dovreste essere in grado di capire quali parti l'implementazione non ha bisogno di questo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top