Existen dos métodos para implementar un servicio de mapas como el que usted describe.
- Los clientes envían los identificadores únicos globales, o
- servidor genera globalmente identificadores únicos
clientes enviar los identificadores únicos globales
Por lo que yo sé, 1. Sólo se debe intentar con Guid
s, a menos que conciba un medio similar para meter información suficientemente distinta en un flujo de bytes cortos. De cualquier manera, si usted tiene un flujo de bytes que representan un identificador único global, que puede hacer algo como esto
// source is either a Guid, or some other globally unique byte stream
byte[] bytes = Guid.NewGuid().ToByteArray();
string base64String = Convert.ToBase64String (bytes).Trim ("=");
para obtener un mensaje legible de caracteres alfanuméricos que aparecen al azar, pero evita las colisiones inherentes a otro al azar esquemas. Un Guid
contiene 16 bytes, o 128 bits, que se traduce en aproximadamente 19 caracteres para una codificación Base64 completa.
La ventaja de este enfoque es que los clientes pueden generar sus propios Uris pequeños sin una autoridad central. La desventaja es una gran longitud si tira con Guid
, o implementa su propia corriente de bytes globalmente única que, admitámoslo, es propensa a errores.
Si sigue esta ruta, considere la posibilidad de hacer búsquedas en Google de bytes de bytes únicos o similares. Ah, y MANTENTE ALEJADO DE BYTES ALEATORIOS, de lo contrario tendrá que construir la resolución de colisión EN LA PARTE SUPERIOR DE su pequeño generador Uri.
Server genera globalmente identificadores únicos
Una vez más, la principal ventaja de lo anterior es que el cliente de puede generar su Uris a priori. Especialmente útil si está por enviar una solicitud de larga ejecución que desea verificar. Esto puede no ser particularmente relevante para su situación, y puede proporcionar solo un valor limitado.
Por lo tanto, aparte de eso, un enfoque centrado en el servidor, en el que una sola autoridad genera y reparte IDS puede ser más atractivo. Si esta es la ruta que eliges, entonces la única pregunta es ¿cuánto tiempo te gustaría tener tu Uri?
Suponiendo una longitud deseada de 5 caracteres, y digamos que va con una codificación Base64, cada identificación puede representar hasta 5 caracteres por 7 bits por carácter equivale a 35 bits o 2^35 [34 359 738 368] valores distintos . Ese es un dominio bastante grande. *
Luego se trata de devolver un valor para un envío determinado. Probablemente hay una gran cantidad de muchas maneras de hacer esto, pero me gustaría ir con algo como esto,
- Enumerar todos los valores posibles dentro de una "lista libre" en su base de datos
- valor Eliminar de la lista libre cuando se consume
- agregar valor a la lista libre cuando se libera
mejoras u optimizaciones pueden incluir
- No enumerar todos los valores en el rango [0, 2^35], en lugar de enumerar un subconjunto manejable, digamos 100 000 valores a la vez, y cuando se consumen todos los valores, sólo tiene que generar otros 100 000 valores en secuencia y continuar
- Agregar una fecha de caducidad a los valores, y reciclar los valores finales espirado del día
- distribuir su servicio, cuando la paralelización de su servicio simplemente repartir pequeños subconjuntos mutuamente excluyentes de su lista gratuito a los servicios distribuidos
Conclusión
En pocas palabras, quieres guara ntee uniqueness - por lo que las colisiones son un gran no-no.
* = 34 359 738 368 es el tamaño del dominio prima, esto es todos los identificadores de 0 a 5 longitud longitud. Si está interesado en restringir todos los identificadores a un mínimo y un máximo de 5, su dominio se parece a todos los identificadores de longitud 0 a 5 (2^35) menos todos los identificadores de longitud 0 a 4 (2^28) son 2^35 - 2^28 = 34 091 302 912, que todavía es bastante grande :)
¿Desea que los suyos utilicen el servicio bit.ly? ¿O tienes que implementar tu personalizado? – keyboardP
esto es para mi propio sitio y no es un servicio de acortamiento de URL, sino para crear urls cortas únicas para los archivos – nLL
La razón por la que pregunté, era porque se podía usar el bit.ly api: http://www.emadibrahim.com/ 2009/05/07/shortening-urls-with-bitlys-api-in-net/ – keyboardP