Es gibt zwei Methoden zum Implementieren eines Mapping-Service wie den von Ihnen beschriebenen.
- Kunden einreichen global eindeutige IDs oder
- Server generiert global eindeutige IDs
Kunden einreichen global eindeutige IDs
Soweit ich weiß, 1. nur versucht werden sollte mit Guid
s, es sei denn, Sie entwickeln ein ähnliches Mittel, um ausreichend unterschiedliche Informationen in einen kurzen Bytestrom zu stopfen. So oder so, wenn Sie einen Stream von Bytes haben, die eine global eindeutige Kennung darstellen, können Sie so etwas wie dieses
// source is either a Guid, or some other globally unique byte stream
byte[] bytes = Guid.NewGuid().ToByteArray();
string base64String = Convert.ToBase64String (bytes).Trim ("=");
tun, um eine vom Benutzer lesbare Zeichenfolge von alphanumerischen Zeichen zu erhalten, die zufällig erscheint, aber vermeidet Kollisionen inhärenten in anderen zufälligen Schemata. A Guid
enthält 16 Byte oder 128 Bit, was für eine vollständige Base64-Codierung etwa 19 Zeichen entspricht.
Der Vorteil dieses Ansatzes ist, dass Kunden ihre eigenen winzigen Uris ohne eine zentrale Autorität generieren können. Der Nachteil ist eine hohe Länge, wenn Sie mit Guid
rollen, oder implementieren Sie Ihren eigenen weltweit einzigartigen Byte-Stream, der - seien wir ehrlich - fehleranfällig ist.
Wenn Sie diese Route gehen, betrachten Sie Google'ing global eindeutige Byte-Streams oder solche. Oh, und Bleib weg von zufälligen BYTES, sonst müssen Sie Kollisionsauflösung ON OFEN Ihren kleinen Uri-Generator bauen.
Server generieren global eindeutige IDs
Auch hier ist der Hauptvorteil der oben ist, dass die Kunden ihre Uris a priori erzeugen kann. Besonders praktisch, wenn Sie eine lang laufende Anfrage einreichen möchten, die Sie überprüfen möchten. Dies ist möglicherweise nicht besonders relevant für Ihre Situation und kann nur begrenzten Wert bieten.
Also, abgesehen davon, könnte ein Server-zentrierten Ansatz, in dem eine einzige Autorität generiert und verteilt IDs attraktiver sein. Wenn dies die Route ist, die du wählst, dann ist die einzige Frage, wie lange möchtest du deinen Uri?
Unter der Annahme einer gewünschten Länge von 5 Zeichen und angenommen, Sie gehen mit einer Base64-Codierung, kann jede ID bis zu 5 Zeichen von 7 Bits pro Zeichen entspricht 35 Bits oder 2^35 [34 359 738 368] unterschiedliche Werte . Das ist eine ziemlich große Domain. *
Dann wird es eine Frage der Rückgabe eines Wertes für eine gegebene Einreichung. Es gibt wahrscheinlich sehr viele viele Möglichkeiten, dies zu tun, aber ich würde mit so etwas wie dies gehen,
- Aufzählen alle möglichen Werte innerhalb einer „freien Liste“ in Ihrer Datenbank
- Wert Entfernen von der Liste frei, wenn verbraucht
- Wert freie Liste hinzufügen, wenn
veröffentlicht
Erweiterungen oder Optimierungen umfassen können
- Zählen Sie nicht alle Werte im Bereich [0, 2^35] auf, sondern führen Sie eine verwaltbare Teilmenge auf, z. B. 100 000 Werte gleichzeitig, und wenn alle Werte verbraucht sind, generieren Sie einfach weitere 100 000 Werte in der Reihenfolge
- Add ein Ablaufdatum auf Werte, und abgelaufene Werte am Ende des Tages recyceln
- Ihren Service vertreiben, wenn der Service einfach austeilen kleine gegenseitig ausschließende Teilmengen Ihrer freien Liste zu verteilten Diensten
Fazit Parallelisierung
Unterm Strich ist, möchten Sie Guara ntee Einzigartigkeit - Kollisionen sind ein großes No-No.
* = 34 359 738 368 die Größe der Raw-Domäne ist, dann ist dies alle IDs von 0 bis 5 Länge Länge. Wenn Sie alle ids auf ein Minimum und Maximum von 5 Länge beschränken möchten, dann sieht Ihre Domain wie alle IDs der Länge 0 bis 5 (2^35) aus, alle Ids der Länge 0 bis 4 (2^28) sind 2^35 - 2^28 = 34 091 302 912, das ist immer noch ziemlich groß :)
Möchten Sie, dass Sie den bit.ly-Service nutzen? Oder musst du deine benutzerdefinierte ausrollen? – keyboardP
Dies ist für meine eigene Website und es ist nicht URL Verkürzung Service, sondern um einzigartige kurze URLs für Dateien – nLL
Der Grund, warum ich fragte, war, weil Sie die bit.ly API verwenden könnten: http://www.emadibrahim.com/ 2009/05/07/shortening-urls-mit-bitlys-api-in-net/ – keyboardP