Grundlegendes zu Basis-36 Math

Mein Name ist 13 Zeichen lang. Es gibt viele DeWolfes, viele Shawns, ein paar Shawn DeWolfes. Mein 13-Zeichen-Name bedeutet nichts Einzigartiges. Auch meine neunstellige Sozialversicherungsnummer geht bisher nur. In meinem Land, Kanada, definiert es mich spezifisch, aber jede andere Nation mit einem neunstelligen Sozialversicherungsnummernsystem wird wahrscheinlich ein Mitglied mit einer Nummer haben, die dieselbe ist wie meine eigene.

Was wäre, wenn eine Nummer jeden lebenden Menschen ansprechen könnte, kürzer als ein Name und kürzer als eine Sozialversicherungsnummer sein könnte? Mit Base-10-Nummern ist das nicht möglich, aber mit Base-36 ist es ein Kinderspiel.

Wir verwenden Basis zehn so sehr, dass wir die Verwendung von Zehnerstellen mit jeder Ziffer, die wir zu einer Zahl addieren, nicht nutzen. Mit zwei Ziffern können wir von 0 bis 99 gehen. Hexadezimal geht es weiter: Mit zwei Hexadezimalziffern können wir zu 255 gelangen - von 0 bis FF. 

Hexadezimalzahlen überschreiten die zehnstellige Marke, ohne neue Zahlen erfinden zu müssen. Dies geschieht, indem A, B, C, D, E und F verwendet werden, um auf die 11. bis 16. Ziffer zu verweisen. Base-36 geht noch einen Schritt weiter und verwendet alle herkömmlich verfügbaren Zeichen, die wir kennen. Base-36 verwendet Zahlen, um die ersten zehn Ziffern zu verarbeiten. Die Ziffern 11 bis 36 beziehen sich auf das Alphabet von A bis Z. Wir kennen die Reihenfolge der Zahlen von 0 bis 9, und wir kennen das Alphabet, sodass wir den Fortschritt vorhersehen können.


Durch die Verwendung der Basis-36-Nummer können bei einer Ökonomie der Größe massiv größere Zahlen referenziert werden. Während eine zweistellige Zahl Sie 99 erreicht; ZZ, ein zweistelliger Base-36-Ausdruck erreicht 1295. Z, ZZZ, ZZZ ist das Basis-Zehnäquivalent von 78.364.164.095. 

Mit dieser siebenstelligen Nummer unter der Basis-36 können Sie auf jede lebende Person und fast jede Person, die jemals lebte, eine eindeutige siebenstellige Nummer angeben. 

Wenn Sie acht Ziffern haben, können Sie das Internet der Dinge abdecken. Acht Ziffern an der Basis-36 zählen bis über zwei Billionen (2.821.109.907.455, um genau zu sein).

Base-36 ist eine gute praktische Decke, mit der anstelle von Basis 10 oder einer hexadezimalen Sequenz gearbeitet werden kann. PHP und MySQL verfügen über Konvertierungsfunktionen, mit denen Zahlen von und zur Basis-36 konvertiert werden können. Die Funktionalität ist da. Es ermöglicht die Speicherung kompakterer Daten. 

Aus menschlicher Sicht wurde gesagt, dass sich viele Menschen an eine Liste von 5 Dingen plus oder minus zwei erinnern können. Viele können sich an wichtige Telefonnummern erinnern. Und so wie die meisten Menschen sich an eine siebenstellige Telefonnummer erinnern können, kann argumentiert werden, dass sie eine siebenstellige Zeichenfolgendarstellung von etwas Großem beibehalten kann - anstelle einer 1-in-einer-Million-Telefonnummer eine siebenstellige Basis-36 Die Zahl wird eine von 78 Milliarden Referenzen darstellen.   

Warum sind große Zahlen wichtig??

Wie oben gezeigt, können große Zahlen nützlich sein, um große Datenmengen anzusprechen. Facebook speichert ihre Beiträge mit nach oben gerichteten ID-Nummern. 

Ein Beitrag, den ich gerade gezogen habe, hat die ID-Nummer 902352183124757. Fünfzehn Ziffern - 902 Billionen. Wenn sie bei 902 Billionen Dollar liegen und ein Typ wie ich in einer verrückten Anzahl von Posts pro Tag wirft und Dutzende Millionen so wie ich tun, wird dieser Post-Kilometerzähler bald rollen. 

Wären die Pfosten mit 10 Basis-36-Ziffern formatiert, hätte die Datenbank mehr Beinfreiheit (z. B. fast 4 Billiarden (3.656.158.440.062.980) Referenzen). Wenn Facebook durch exponentielles Wachstum an diesen Punkt gelangt ist und dieses exponentielle Wachstum abflacht, sollten mehr als zwei Billiarden Einträge dieser Datenbank den Raum geben, den sie benötigen, um neue Beiträge zu referenzieren, ohne einen Googolplex-Wert zu erhalten.

Sind nicht Basis-36-Zahlen, die intensiv verarbeitet werden?

Ja und nein. In einer Datenbank sind Ganzzahlen die wirtschaftlichste Art, Daten zu speichern. Basis-36-Zahlen würden als Zeichenketten betrachtet und Zeichenketten sind kostspieliger. 

Ebenso erhöht das Auto-Inkrement in MySQL nur Ganzzahlen. Sie können Strings so formatieren, dass sie konsistent sind. Zum Beispiel könnten alle 10 Zeichen mit Nullen links von der Zahl verwendet werden, so dass 0000000008 acht wäre, während 00000000ZZ 1295 wäre. Wenn diese alphabetisch sortiert wäre, würde die Progression wie eine numerische Progression aussehen. Während die automatische Inkrementierung in MySQL und die meisten anderen relationalen Datenbanken integriert ist, ist es nicht das einzige Spiel in der Stadt. Sie können neue automatisch generierte Basis-36-Nummern erstellen, indem Sie einen Trigger einer Tabelle zuordnen (die wir kurz besprechen), um neue, geordnete Werte einzufügen, wenn neue Datensätze eingefügt werden.

Wo Base-36 verwendet werden kann

Das Ziel von base-36 ist Verdichtung und Relevanz. Anstatt zehn Stellen, um die Menschen auf der Erde zu referenzieren, werden sieben Zeichen alle ansprechen. Anstelle von 16 Ziffern, um alle Statusupdates von Facebook zu adressieren, können 10 Zeichen verwendet werden. Wenn es um die Relevanz geht, kann die Sequenz sowohl ein inkrementierender Wert sein, als auch ein Teil des Wertes zur Seite gelegt werden, um zusätzliche Qualitäten in dem Definierten zu definieren.

Base-36 kann verwendet werden, um auf diese Arten von Elementen zu verweisen:

  • Menschen. Eine siebenstellige Basis-36-Nummer kann sich auf 78 Milliarden Menschen beziehen. Wenn Sie die Referenz eines Benutzers in 7 Zeichen konvertieren.
  • Ländercodes. Ländercodes sind bereits zwei Zeichen. Es gibt 193 anerkannte Länder (indem ich das schreibe, weiß ich einfach, dass sich ein Land in zwei Hälften teilen wird, wenn ich in die Nähe komme). Der ISO-3166-Standard ist eine Liste von zweistelligen Ländercodes. Mit zwei alphabetischen Zeichen können 676 bestimmte Länder referenziert werden. Für Ländercodes können nur zwei Zeichen verwendet werden. Bei Verwendung des ISO-3166-Standards bleiben über 400 Referenzen unbenutzt, sie bieten jedoch immer noch eine gemeinsame und erkennbare Referenz.
  • Städte. China hat mit einer Milliarde Menschen mehr als 1020 Städte. Diese Communities könnten innerhalb von zwei 36-stelligen Ziffern referenziert werden. Viele Länder werden weniger als 1000 Gemeinden haben. Nehmen wir an, dass die Referenzen der Community wirklich besonders werden. Um alle Referenzen zu erfüllen, können drei Ziffern 46.655 Communities innerhalb eines Landes zuordnen.
  • Geräte. Ich bin sicher, dass das Internet der Dinge kommt. Ich habe drei Geräte mit eigenen WLAN-Anforderungen. Einige technikfreundliche Leute könnten viel mehr verdrahtete Geräte haben. Wenn dies 36 Geräte pro Person wären, könnte eine Ziffer alle diese Geräte abdecken. Zwei Ziffern für die Referenzierung von Geräten und Dingen umfassen 1295 Möglichkeiten.

Amalgamierte Seriennummern

Diese Zeichenfolgen können so kombiniert werden, dass sie durch Zusammenfassen der Zeichen in einer geordneten Reihenfolge eindeutig sind. Im folgenden Beispiel können Sie sich auf Personen, ihren Standort und ihre Geräte beziehen. Die gesamte Zeichenfolge kann eindeutig sein, während Elemente darin wiederholt werden.

Zum Beispiel könnte US001200GHK4 eigentlich bedeuten:

  • US - Ländercode
  • 001 - Manhattan
  • 200GHK4 - Der eindeutige Code einer Person.

Möglicherweise werden ihre Geräte zum Identifikationsprozess hinzugefügt. Nehmen wir an, der Laptop ist das primäre Gerät. Wenn das Mobiltelefon in die Liste eingesetzt wird, ist dies das zweite Gerät, das dem Benutzer zugeordnet ist: US001200GHK42. Die "2" steht für dieses zweite Gerät.

Wenn auf diese Weise die Basis-36 zur Identifizierung verwendet wurde, wird die Länge der Zeichenfolge mit dem korrespondieren, was sie verbindet.

  • Zweistellig = Land unter Verwendung der ISO-3166-Standardcodes
  • Fünf Ziffern lang = Gemeinschaft in einem Land
  • Zwölf Ziffern lang = eine Person, wenn sie in einem Land lebt
  • Dreizehn Ziffern lang = Verweis auf ein IP-adressierbares Gerät, das einem Benutzer in einer bestimmten Community und in einem bestimmten Land gehört.

Mit 13 Ziffern wird eine MySQL-Suche nach „US%“ für alle US-Bürger zurückgegeben. „US001%“ wird alle Menschen in Manhattan zurückbringen. „US001% 1“ zeigt das von allen Bewohnern in Manhattan verwendete primäre / bevorzugte Gerät an. Mit einer solchen Logik kann die Kommunikation zu einem bevorzugten Teil eines Netzwerks geleitet werden.

Natürlich gibt es viele Möglichkeiten, wenn:

  • Was ist, wenn sie Städte wechseln? Die dritten bis fünften Zeichen ändern sich.
  • Was ist, wenn sie in ein anderes Land hüpfen? Die ersten fünf Ziffern ändern sich, um die neuen Digits anzuzeigen.
  • Was ist, wenn sie mehr als 36 Geräte besitzen? Wenn dies der Fall ist, können die letzten beiden Ziffern ihr Gerät darstellen und nicht nur das letzte. Eine vierzehnstellige ID-Nummer würde sagen: "Dieser Typ hat viele Gadgets."

Speicherung in einer Datenbank

Der Hauptzweck, diese großen Zahlen zu erstellen und als Basis-36-Referenzen zu speichern, besteht darin, eine Art Wirtschaftlichkeit zu betreiben. Diese müssen wie Indexschlüssel sequenziell sein, aber Sie müssen keine besonderen Berechnungen mit ihnen machen.

In MySQL werden Basis-36-Zeichenfolgen als gespeichert VARCHAR Datentypen verhalten sich wie Ganzzahlen. Die Strings können durch Aggregatfunktionen wie verglichen werden MAX () und MINDEST() um die höchsten bzw. niedrigsten verfügbaren Zahlen zu erhalten. 

Sie können eine Base-36-Zeichenfolge auch abrufen, indem Sie in absteigender Reihenfolge sortieren, um zuerst die höchste Zahl zu erhalten. Im Gegensatz zu ganzen Zahlen können Basis-36-Zeichenfolgen mit gefiltert werden MÖGEN Anweisungen sollten die Zeichenfolgen aus einer Kombination aus zusammengeführten Reihen und inkrementierenden Werten bestehen.

Werte in MySQL verwenden

In MySQL gibt es die CONV () Funktion, die von einer Basis-2 bis zu einer Basis-36-Nummer konvertiert werden kann. Um eine Basis-36 zu ihrem Basis-10-Äquivalent zu bekommen, tun Sie CONV ('ZA', 36, 10). Um von einer Basis 10 zu einer Basis 36 zu gelangen, können Sie den anderen Weg wählen. CONV ('1294', 10, 36). Sie können diese Funktionen verschachteln, um etwas zu erstellen, das inkrementiert wird: CONV (CONV ('ZA', 36, 10) + 1, 10, 36)  gibt 'ZB' aus.

Inkrementieren von Base-36-Schlüsseln in MySQL

Dies kann in eine benutzerdefinierte Prozedur eingefügt werden, und diese Prozedur kann ausgelöst werden, wenn neue Datensätze in eine Datenbanktabelle eingefügt werden. Im folgenden Beispiel wird der Auslöser zum hinzugefügt base_example auszuführende Tabelle und Erstellen eines Basis-36-Schlüssels, wenn ein neuer Datensatz zur Tabelle base_example hinzugefügt wird.

CREATE TABLE WENN NOT EXISTS 'base_example' ('bkey' varchar (12) NOT NULL, 'Info' Text NOT NULL) ENGINE = InnoDB DEFAULT CHARSET = latin1; CREATE TRIGGER 'b36_incr' VOR INSERT ON 'base_example' FÜR JEDE ROW BEGIN DECLARE old_bkey VARCHAR (12); DECLARE Zeilenanzahl INT; SELECT COUNT (*), bkey in rowcount, old_bkey FROM 'base_example' GROUP BY bkey ORDER BY bkey DESC LIMIT 1; IF (1 <= rowcount) AND (old_bkey IS NOT NULL) THEN SET new.bkey = LPAD(CONV(CONV(old_bkey, 36, 10) + 1, 10, 36), 12, '0'); ELSE SET new.bkey = LPAD('0', 12, '0'); END IF; END

Abbildung 1. Eine ausgelöste Prozedur zum Erstellen und Inkrementieren von Werten.

In diesem Beispiel werden dem Mix zwei Annahmen hinzugefügt. Zuerst die VARCHAR Das Feld soll 12 Zeichen lang sein. Zweitens die Werte in der VARCHAR Feld wird mit Nullen links aufgefüllt, sodass alle Ausgaben konsistent aussehen und auf vorhersagbare Weise sortiert werden können.

Mathe mit Basis-36

Base-36 ist cool, aber die meisten Sprachen beziehen sich immer noch auf Dinge in Base 10 und binär. PHP kann jedoch Basis-Konvertierungen durchführen, und es ist schlau genug, die Buchstaben A bis Z zu extrapolieren, die die 11. bis 36. Ziffer abdecken. 

Mit einer einfachen Funktion können Basis-36-Zahlen eine Funktion (die wir momentan sehen werden) zur Konvertierung, Berechnung und einem Rückgabewert übergeben werden. Dazu werden die 0-9A-Z-Zeichen aus der Formel gezogen, eine Base-36-Berechnung ausgeführt und die Ausgabe anschließend wieder in Base-36 konvertiert.

$ bthreesix = "ZZ"; // das Basis-10-Äquivalent von 1295 $ zz = base_convert ($ bthreesix, 36,10); $ zz ++; // ZZ wird 100 $ bthreesix = base_convert ($ zz, 10,36); echo $ bthreesix;

Basis-36-Formeln in PHP erstellen

Es gibt eine Grenze für die Komplexität der Mathematik, aber ich habe eine Beispielfunktion geschrieben b36math () das wandelt eine Base-36-Formel in ein Base-36-Ergebnis um.

"; drucken b36math (" ZW + 9 "); drucken"
"; Funktion b36math ($ formula =" ") $ out = preg_replace_callback (" / ([\ w] +) / "," b36convert ", $ formula); // incr / decr funktionieren nicht wie angekündigt $ = str_replace ("++", "+ 1", $ out); $ out = str_replace ("-", "- 1", $ out); eval ('$ outer ='. $ out. ';' ); return strtoupper (base_convert ($ outer, 10, 36)); Funktion b36convert ($ matches) $ digits = ""; array_shift ($ matches); foreach ($ entspricht als $ key => $ match) $ Digits. = $ match; $ new_number = base_convert ($ digit, 36, 10); return intval ($ new_number);?>

Abbildung 2. Die b36math-Konvertierungsfunktion zum Ausführen von Funktionen, die mit Basis-36-Nummern ausgeführt werden.

Fazit

Unsere Welt ist datenhungrig. Diese Daten müssen gut referenziert werden. Beim Zugriff auf größere Datenbestände können Sie mithilfe von Referenzen, die als Basis-36-Nummern gespeichert sind, größere Zahlen auf weniger Speicherplatz speichern. 

Es gibt ein Wettlauf mit dem, was ein wertvolles Gut ist: Verarbeitungsgeschwindigkeit, Bandbreite oder Speicher. Wenn einer reichlich vorhanden ist, können Sie ihn dafür ausgeben, den anderen zu kompensieren. Wenn Sie viele Zyklen für die Verarbeitung zur Verfügung haben, können Sie Daten in einem umständlichen Format speichern und die Verarbeitung verwenden, um sie verwendbar zu machen. 

Es gibt zwar eine Begrenzung der Anzahl von Ziffern, auf die in einer Ganzzahl verwiesen werden kann, Varchar Felder können bis zu 255 Zeichen umfassen, und Textfelder sind offen. Es können sehr große Zahlen der Basis 36 gespeichert werden, um einzelne Elemente in sehr großen Datenbeständen zu referenzieren.