Ich möchte Youtube als Beispiel verwenden: Sie verwenden IDs in Form von PEckzwggd78
.
Warum verwenden sie keine einfachen ganzen Zahlen?
Oder imgur.com - sie verwenden auch IDs wie 9b6tMZS
für Bilder und Galerien. Nicht sequentielle ganze Zahlen.
Warum verwenden sie keine Ganzzahlen (insbesondere sequentielle)?
In welchen Fällen ist es eine kluge Entscheidung, solche Zeichenfolgen-IDs anstelle von Ganzzahlen zu verwenden?
Antworten:
Youtube kann aus zwei Gründen keine fortlaufenden IDs verwenden:
Die Datenbanken sind mit ziemlicher Sicherheit verteilt, was die fortlaufende Nummerierung erschwert.
Es gibt eine Datenschutzoption "Nicht aufgelistete Videos": Diese werden nicht in den Suchergebnissen angezeigt, sind jedoch verfügbar, wenn Sie die ID kennen.
Daher sollten die Video-IDs einigermaßen zufällig und nicht vorhersehbar sein. Ob die ID nur durch Ziffern oder durch eine Kombination aus Buchstaben und Ziffern dargestellt wird, spielt keine Rolle: Es gibt eine triviale Zuordnung von einer Darstellung zu einer anderen.
quelle
2^40
Elemente speichern müssen , gibt es in einigen Architekturen legitime Gründe für die Auswahl eines Leerzeichens2^80
oder von2^120
Bits. Beispiele für Gründe sind: Reduzieren der Kollision, ohne technisch auf Kollision zu prüfen; Verwendung der Sparsamkeit der Schlüssel als Teil der Geheimnisse schwer zu finden (das "nicht gelistete Video"), etc.Auf der Form der IDs: Sie sind mit Base64 (mit den Zeichen
a
-z
,A
-Z
,0
-9
,-
und_
). Dies ermöglicht es ihnen, 6 Informationsbits pro Zeichen zu haben. YouTube verwendet 11-stellige Video-IDs. Dies bedeutet, dass 2 6 * 11 oder mehr als 7 * 10 19 IDs generiert werden können . Wie Tom Scott es ausdrückte , "reicht es aus , dass jeder einzelne Mensch auf dem Planeten Erde etwa 18.000 Jahre lang jede Minute ein Video hochlädt." Base64 ist auch einfach zu handhaben, da 64 eine Zweierpotenz ist, was bedeutet, dass jedes Zeichen eine exakte Anzahl von Bits darstellt. Aus dem gleichen Grund verwenden wir hexadezimal (Basis 16).Zum nicht-sequenziellen Charakter der IDs: Dies bedeutet, dass kein synchronisierter Zähler zwischen allen Servern benötigt wird, die den Videos IDs zuweisen. Sie können einfach eine Zufallszahl generieren, prüfen, ob sie bereits verwendet wird, und von dort aus fortfahren. Sie könnten sogar jedem Server einen ID-Block zuweisen, von dem sie auswählen und die Duplizierungsprüfung beseitigen können. Ich weiß nicht, ob sie das tun, aber sie könnten es.
Ein weiterer Grund für die nicht sequenziellen IDs ist, dass "nicht gelistete" Videos funktionieren. Dies sind Videos, die nicht in Suchergebnissen oder als Vorschläge angezeigt werden, auf die Sie jedoch zugreifen können, wenn Sie den Link haben. Wenn Sie die sequentielle Zählung verwenden, können Sie einfach zu einem Video wechseln, die ID um eins erhöhen und die Idee nicht aufgelisteter Videos ist nun gebrochen.
Nicht sequenzielle IDs helfen auch dabei, Informationen vor Wettbewerbern zu verbergen, z. B. die Gesamtanzahl der Videos oder die Anzahl der pro Zeitrahmen hochgeladenen Videos.
Ich kann Tom Scotts Video wärmstens empfehlen . Seine Informationen sind fast immer sowohl interessant als auch genau.
quelle
Ganzzahlen skalieren nicht so gut, eine "normale" 32-Bit-Ganzzahl ohne Vorzeichen erreicht ein Maximum von etwas mehr als 4 Milliarden.
Sie möchten möglicherweise nicht, dass Sie wissen, wie viele Artikel sie online haben, oder dass Sie die Rate verfolgen, mit der sie wachsen.
Buchstaben können mehr Informationen als Ziffern enthalten. Sie benötigen weniger Buchstaben, um dieselbe "Zahl" auszudrücken. Bei einer großen Indexer-Datenbank könnte sich dies summieren.
quelle
1) Warum verwenden manche Websites Buchstaben in ihren IDs? Sind sie Saiten?
Wir wissen nicht, ob diese Websites IDs als Zeichenfolgen in ihrer Datenbank speichern. Zahlen und Zeichenfolgen sind für Computer eigentlich gleich. Eine Zeichenfolge ist nur eine Zahl, die nur mit einer anderen Basis angezeigt wird.
'A' = 0x41 = 65 = 0b1000001
Für den Computer ist es alles das Gleiche. Wenn Sie es jedoch anzeigen, sind die Basis, die Darstellung und die URLs umso kürzer, je einfacher sie für den Menschen zu lesen und freizugeben sind. Websites wie YouTube und Imgur verwenden die Basis 62 (Buchstaben, Groß- und Kleinbuchstaben sowie Ziffern) oder höher (fügen Sie einen Bindestrich oder andere gültige URL-Zeichen hinzu), was für große Zahlen relativ kurz ist. Was würdest du am liebsten benutzen,youtu.be/23489234892348234933
oderyoutu.be/B9k6KMrv8vh
?2) Warum werden nicht sequentielle IDs verwendet?
Die Antwort von IMil erklärt es gut:
Dies erklärt auch, warum die IDs so groß sind: (YouTube hostet offensichtlich keine 23.489.234.892.348.234.933 verschiedenen Videos.)
Wenn Sie beim Generieren von IDs versehentlich zweimal dieselbe ID generieren, ist dies ein Problem. Sie benötigen daher einen großen ID-Bereich, um das Geburtstagsproblem zu vermeiden
Die URL nicht gelisteter Videos kann nur erraten werden, wenn die Wahrscheinlichkeit, dass eine gültige ID für ein Video verwendet wird, nicht sehr, sehr gering ist.
quelle
People can just guess the URL of unlisted videos if the chance of any given valid ID being used for a video isn't very, very small.
- Woher weißt du, ob ein nicht gelistetes Video nur für den Autor zugänglich ist? selbst wenn jemand anderes seine ID erraten hatAls beiseite, es ist nicht unbedingt der Fall , dass die interne Darstellung ist eine Zeichenfolge. Sie könnten sehr wahrscheinlich eine numerische Kennung als alphanumerische Zeichenfolge für die kürzere URL codieren.
quelle
Sie haben darauf hingewiesen haben , dass es eine UUID mit Zahlen nur , weil unter der Haube alles zu verwenden , wäre einfach nur
0
und1
und man konnte die Zahl auf mehr Präzision geht bis zu 128 Bit oder mehr erweitern.Ich denke, der Hauptgrund ist, dass man, wenn man einen beliebigen festen Bereich annimmt, wie
uint32
(nur zum Beispiel), wenn man auch Buchstaben verwendet, insgesamt eine kürzere ID haben kann.Ich stelle mir vor, dass dies ein ästhetischer Grund für die URL ist. Anstatt
4,129,873,773
mit Briefen zu haben, ist es viel kürzerFu837t
(nur erfunden von mir). Ein Benutzer kann sich möglicherweise sogar die URL merken, über die er sie an einen Freund weitergibt. Plattformen wie Youtube haben normalerweise längere UUIDs als 32 Bit, da ihnen schnell der Speicherplatz ausgeht.quelle
Eine kurze URL ist wünschenswert, da sie das Verknüpfen und Freigeben vereinfacht (z. B. Sie können einen Link in einer SMS freigeben, die Eingabe ist schneller usw.). Dienste wie Youtube oder Imgurl möchten, dass Sie URLs zufällig freigeben. Dies ist daher ein wichtiger Gesichtspunkt.
Wenn Sie alphanumerische IDs anstelle von numerischen verwenden, benötigen Sie weniger Zeichen, um eine ID mit derselben Bitgröße auszudrücken. Beispiel: 6 Ziffern geben Ihnen eine Million eindeutiger IDs, 6 alphanumerische Zeichen (unter Verwendung des base64-Satzes) geben Ihnen 68 Milliarden eindeutige IDs.
Soweit wir wissen, können die alphanumerischen Bezeichner fortlaufende Nummern sein, die nur in einem alphanumerischen Format wie base64 codiert sind. Häufig verzichten kommerzielle Dienste jedoch auf sequentielle Codes, um zu verhindern, dass Personen Ausweise erraten und Geschäftsinformationen wie die Anzahl der Kunden preisgeben.
quelle
Es gibt mehrere Gründe, warum Sie nicht-numerische IDs verwenden, aber auch, dass nicht alle Werte mit alphabetischen Zeichen wirklich Zeichenfolgen sind. YouTube hat den Ruf einer unglaublichen Anzahl von Videos, die in der Größenordnung von 300 Stunden pro Minute hochgeladen werden ( ref ). Die eindeutigen Ganzzahlen, die diese Videos darstellen, können sehr lang werden. Verwenden Sie also so etwas wie Base64-URL-codierte Zahlen ( ref ).
Arten von Identifikatordarstellungen:
Sie alle haben ihre Stärken und Schwächen. Je mehr eindeutige Zeichen Sie für Ihre Kennungen verwenden können, desto weniger Zeichen müssen Sie für eine Zahl verwenden. Zahlen zur Basis 64 sind ein ziemlich guter Kompromiss, da es eine etablierte Variante gibt, die für URLs funktioniert und die Anzahl der Zeichen komprimiert, die benötigt werden, um eine Zahl von 6 bis 8 darzustellen (dh 3/4 der Größe).
Lesbare Zeichenfolgen eignen sich für Blogs, da sie die Durchsuchbarkeit verbessern und es viel einfacher ist, eindeutige Titel zu generieren, wenn die Anzahl der Datensätze gering ist.
quelle
Inhalts-Hashes
Das Wort "Hash" wird in den vorhandenen, netten Antworten nicht gefunden.
Häufig können Daten anhand ihres Inhaltshashs anstelle einer unabhängigen, künstlichen ID identifiziert werden. Dies zeigt sich besonders in Software-
git
oder Dateisystemen wie ZFS, in denen diese besondere Eigenschaft der Verwendung von Inhalts-Hashes nicht nur die Arbeit erleichtert (z. B. die Deduplizierung), sondern auch andere nützliche Eigenschaften aufweist, z usw.Hashes werden normalerweise als Hexadezimalzahlen (oder mit einem noch größeren Buchstabenabstand) ausgegeben. Aus diesem Grund werden keine Ganzzahl-IDs angezeigt. Es gibt einfach sind keine ganzen Zahlen (in diesen Fällen).
Hashes sind gut, wenn Ihre Datenobjekte unveränderlich sind (wie in ZFS oder
git
). Sie eignen sich hervorragend zum Speichern von Bildern, z. B. auf großen CDNs. Ich weiß nicht, ob es sich bei diesen bestimmten IDs tatsächlich um Hashes handelt, aber es wäre sicherlich sinnvoll (und wie Michael Kjörling ausführte, sind kurze IDs wahrscheinlich aus offensichtlichen Gründen keine Hashes) Hex-Ziffern).quelle
hashCode()
usw. Je kürzer die Hash, desto wahrscheinlicher sind zufällige Kollisionen.Ok, einer der Gründe ist, dass die Zeichen als Zeichen und sowieso nicht als ganze Zahlen gesendet werden. Dies liegt daran, wie ein HTTP-Abruf funktioniert.
Wenn Sie sagen, "warum nicht eine ganze Zahl verwenden?" Nun, die ganze Zahl wird dann zerhackt und jede Ziffer wird als Zeichen gesendet, und Sie erhalten trotzdem eine Zeichenfolge. Warum also nicht alle Optionen für einen Charakter nutzen?
Es gibt auch den menschlichen Faktor:
Nehmen wir zum Beispiel imgur: https://imgur.com/ ***** / s6UqP
s6UqP,
Der Bereich für jedes Zeichen ist: a bis z, a bis z, und 0 bis 9 = 26+ 26+ 10 = 62 Optionen für jede Position in der Zeichenfolge. Mit fünf Positionen sind das 916132832 mögliche Kombinationen. Wenn Sie nur Zahlen verwenden würden, würden Sie 9 Stellen benötigen.
Menschen können ungefähr 7 Objekte speichern, 9 Stellen sind zu viel, 5 Zeichen sind möglich.
Magische Nummer 7
quelle