In Bezug auf High Performance MySQL Version 3 (Abschnitt 4.1.7) empfiehlt der Autor, beim Speichern von IPv4-Adressen vorzeichenlose 32-Bit-Ganzzahlen (UNSIGNED INT) anstelle von Zeichenfolgen zu verwenden. Es wurde jedoch kein konkreter Grund genannt. Um die Ursache herauszufinden, habe ich einige Informationen überprüft und aufgezeichnet. Im Vergleich zur Zeichenfolgenspeicherung bietet die Verwendung vorzeichenloser Ganzzahlen zur Speicherung die folgenden Vorteile:
Beim Speichern einer IPv4-Adresse muss diese normalerweise mindestens 7 und höchstens 15 Zeichen lang sein, daher kann VARCHAR(15) verwendet werden. Wenn MySQL eine Zeichenfolge mit variabler Länge speichert, ist ein zusätzliches Byte erforderlich, um die Länge der Zeichenfolge zu speichern. Wenn Sie zur Speicherung vorzeichenlose Ganzzahlen verwenden, werden nur 4 Bytes benötigt. Darüber hinaus können Sie 4 Felder verwenden, um jeden Teil von IPv4 separat zu speichern. Normalerweise sollte dies jedoch im Hinblick auf Speicherplatz und Abfrageeffizienz nicht zu viel sein (es kann einige Szenarien geben, in denen diese Speichermethode geeignet ist). Eine ausführliche Leistungsanalyse und Benchmarks zur Verwendung von Zeichenfolgen und vorzeichenlosen Ganzzahlen zum Speichern von IP finden Sie in diesem Artikel. Die Verwendung vorzeichenloser Ganzzahlen zur Speicherung hat auch Nachteile:
Zur Konvertierung stellt MySQL entsprechende Funktionen bereit, um IP im String-Format in den Integer INET_ATON und IP im Integer-Format in den String INET_NTOA umzuwandeln. Wie unten dargestellt: mysql> wähle inet_aton('192.168.0.1'); +--------------------------+ | inet_aton('192.168.0.1') | +--------------------------+ | 3232235521 | +--------------------------+ 1 Zeile im Satz (0,00 Sek.) mysql> wähle inet_ntoa(3232235521); +--------------------------+ | inet_ntoa(3232235521) | +--------------------------+ | 192.168.0.1 | +--------------------------+ 1 Zeile im Satz (0,00 Sek.) Für IPv6 können die gleichen Vorteile durch die Verwendung von VARBINARY erzielt werden, und MySQL bietet auch entsprechende Konvertierungsfunktionen, nämlich INET6_ATON und INET6_NTOA. Paket com.mikan; /** * @Autor Mikan * @date 22.09.2015 10:59 */ öffentliche Klasse IpLongUtils { /** * Konvertieren Sie die Zeichenfolge IP in lang * * @param ipStr Zeichenfolge IP * @return der lange Wert, der der IP entspricht*/ öffentliche statische lange ip2Long(String ipStr) { String[] ip = ipStr.split("\\."); Rückgabewert (Long.valueOf(ip[0]) << 24) + (Long.valueOf(ip[1]) << 16) + (Long.valueOf(ip[2]) << 8) + Long.valueOf(ip[3]); } /** * Konvertieren Sie den langen IP-Wert in eine Zeichenfolge* * @param ipLong Langer Wert der IP* @return der String, der dem langen Wert entspricht*/ öffentliche statische Zeichenfolge long2Ip(long ipLong) { StringBuilder ip = neuer StringBuilder(); ip.append(ipLong >>> 24).append("."); ip.append((ipLong >>> 16) & 0xFF).append("."); ip.append((ipLong >>> 8) & 0xFF).append("."); ip.append(ipLong & 0xFF); gibt ip.toString() zurück; } öffentliche statische void main(String[] args) { System.out.println(ip2Long("192.168.0.1")); System.out.println(long2Ip(3232235521L)); System.out.println(ip2Long("10.0.0.1")); } }
Damit ist dieser Artikel zum effektiven Speichern von IP-Adressen in MySQL und zur Konvertierung zwischen Zeichenfolgen-IPs und numerischen Werten abgeschlossen. Weitere Informationen zum effektiven Speichern von IP-Adressen in MySQL finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Wir hoffen, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird! Das könnte Sie auch interessieren:
|
<<: Detaillierte Erläuterung der Verwendung des gcc-Befehls unter Linux
>>: CSS3-Mauszeiger-Übergangszoomeffekt
Inhaltsverzeichnis Einfach zu bedienen Erstellen ...
Inhaltsverzeichnis 1. Ziehen Sie das Bild 2. Erst...
Grundlegende SQL-Anweisungen MySQL-Abfrageanweisu...
In diesem Artikel wird der spezifische Code von V...
<html> <Kopf> <meta http-equiv=&quo...
Daten sind das wichtigste Kapital eines Unternehm...
Nach dem Einrichten des MySQL-Master-Slaves wisse...
Docker-Daemon-Socket Der Docker-Daemon kann über ...
brauchen: Identische Elemente eines Feldes zusamm...
Ich wusste vorher, dass man await verwenden muss,...
Es gibt viele Formularelemente. Hier ist eine kur...
Verwenden Sie den Linux-Befehl chmod , um zu steu...
Einführung MySQL erreicht eine hohe Verfügbarkeit...
Meistens werden Plug-Ins zum Hochladen von Dateie...
Hier sind zwei Terminal-Split-Screen-Tools: scree...