Linux - Verwenden Sie MyCat, um die Lese-/Schreibtrennung zwischen MySQL-Master und -Slave zu implementieren1. MySQL-Lese-/Schreibtrennung1. Übersicht über die Lese- und Schreibtrennung von MySQLDa es sich um die am weitesten verbreitete kostenlose Datenbank der Welt handelt, bin ich davon überzeugt, dass jeder Ingenieur, der mit dem Betrieb und der Wartung von Systemen befasst ist, schon einmal mit MySQL in Berührung gekommen sein muss. In der tatsächlichen Produktionsumgebung kann ein einzelner MySQL-Server als unabhängige Datenbank die tatsächlichen Anforderungen jedoch überhaupt nicht erfüllen, weder in Bezug auf Sicherheit, hohe Verfügbarkeit, hohe Parallelität usw. Daher werden Daten im Allgemeinen durch 2. Funktionsprinzip der Lese- und SchreibtrennungDas Grundprinzip besteht darin, dass die Master-Datenbank transaktionale Hinzufügungs-, Änderungs- und Löschvorgänge (INSERT, UPDATE, DELETE) handhabt, während die Slave-Datenbank SELECT-Abfragevorgänge handhabt. Mithilfe der Datenbankreplikation werden durch Transaktionsvorgänge verursachte Änderungen an Slave-Datenbanken im Cluster synchronisiert. Fügen Sie hier ein Bild ein, um den internen Datenaustauschprozess zu beschreiben: 3. Warum müssen wir Lesen und Schreiben trennen?
3. So erreichen Sie eine Lese-/SchreibtrennungEs gibt zwei Möglichkeiten, dies zu erreichen : (1) Implementierung auf Anwendungsebene: Die Programmimplementierung der Website. Unter Implementierung auf Anwendungsebene versteht man die Umsetzung der Lese-/Schreibtrennung innerhalb der Anwendung und im Connector. Vorteile: Die Lese- und Schreibtrennung wird innerhalb der Anwendung erreicht und kann nach der Installation verwendet werden. Sie verringert den Bereitstellungsaufwand bis zu einem gewissen Grad. Der Zugriffsdruck liegt unter einem bestimmten Niveau und die Leistung ist sehr gut. (2) Implementierung auf Middleware-Ebene: Unter Implementierung auf Middleware-Ebene versteht man die Implementierung der Lese- und Schreibtrennung in externen Middleware-Programmen. 4. Gemeinsame Middleware-Programme (1) Cobar: Ein von Alibaba B2B entwickeltes relationales verteiltes System, das fast 3.000 MySQL-Instanzen verwaltet. Es hat den Test bei Alibaba bestanden, aber später wurde Cobar aufgrund des Weggangs des Autors von niemandem mehr gepflegt, und Alibaba hat auch TDDL entwickelt, um Cobar zu ersetzen. 2. MyCAT-Übersicht1. Was ist MyCATEin vollständig Open Source-großer Datenbankcluster für die Entwicklung von Unternehmensanwendungen; eine erweiterte Datenbank, die Transaktionen und ACID unterstützt und MySQL ersetzen kann; eine Datenbank auf Unternehmensebene, die als MySQL-Cluster betrachtet werden kann, um teure Oracle-Cluster zu ersetzen; ein neuer SQL Server, der Speicher-Caching-Technologie, NoSQL-Technologie und HDFS-Big Data integriert; eine neue Generation von Datenbankprodukten auf Unternehmensebene, die traditionelle Datenbanken und neue verteilte Data Warehouses kombiniert; ein neuartiges Datenbank-Middleware-Produkt. 2. Installation und Konfiguration des MyCat-DienstesMyCat bietet kompilierte Installationspakete, die die Installation und Ausführung auf Windows, Linux, Mac, Solaris und anderen Systemen unterstützen. Offizielle Download-Homepage http://www.mycat.org.cn/ Architektur: 192.168.1.63 meine Katze 192.168.1.64 Master 192.168.1.65 Slave Mycat erfordert JDK 1.7 oder höher: Schritt 1: Laden Sie die Datei jdk-8u191-linux-x64.tar.gz herunter [root@xuegod63 lokal]# wget http://download.oracle.com/otn-pub/java/jdk/8u191- b12/2787e4a523244c269598db4e85c51e0c/jdk-8u191-linux-x64.tar.gz #Wenn es ein Problem mit dem unter Linux heruntergeladenen Paket gibt, müssen Sie den Link zu Windows kopieren, ihn herunterladen und dann auf Linux hochladen. Schritt 2: Erstellen Sie einen neuen Ordner /usr/java und entpacken Sie jdk-8u191-linux-x64.tar.gz in das Verzeichnis [root@xuegod63 lokal]# mkdir /usr/java [root@xuegod63 lokal]# tar xf jdk-8u191-linux-x64.tar.gz -C /usr/java/ Schritt 3: Umgebungsvariablen konfigurieren Fügen Sie den folgenden Inhalt am Ende von /etc/profile hinzu: [root@xuegod63 local]# vim /etc/profile.d/java.sh #Erstellen Sie die Datei java.sh im Verzeichnis /etc/profile.d/ und legen Sie den folgenden Inhalt fest: JAVA_HOME=/usr/java/jdk1.8.0_191 PATH=$JAVA_HOME/bin:$PATH CLASSPATH=$JAVA_HOME/jre/lib/ext:$JAVA_HOME/lib/tools.jar Exportieren Sie PFAD JAVA_HOME CLASSPATH [root@xuegod63 local]# source /etc/profile.d/java.sh #Umgebungsvariablen wirksam machen [root@xuegod63 local]# java -version #Java-Version anzeigen java version "1.8.0_191" Java(TM) SE-Laufzeitumgebung (Build 1.8.0_191-b12) Java HotSpot(TM) 64-Bit Server VM (Build 25.191-b12, gemischter Modus) Installieren Sie mycat. Unter Linux können Sie Mycat-server-xxxxx.linux.tar.gz herunterladen und in ein Verzeichnis entpacken. Beachten Sie, dass das Verzeichnis keine Leerzeichen enthalten darf. Unter Linux (Unix) wird empfohlen, es wie folgt im Verzeichnis usr/local/Mycat abzulegen: [root@xuegod63 ~]# tar -xf Mycat-server-1.5-RELEASE-0301083012-linux.tar.gz -C /usr/lokal/ [root@xuegod63 lokal]# ls /usr/local/mycat/
[root@xuegod63 ~]# Benutzeradd mycat [root@xuegod63 ~]# passwd mycat #Geben Sie das Passwort zweimal ein, damit die Änderung erfolgreich ist [root@xuegod63 ~]# chown -R mycat.mycat /usr/local/mycat #Berechtigungen ändern Das Verzeichnis wird wie folgt erklärt: Im Bin-Programmverzeichnis werden die Windows-Version und die Linux-Version gespeichert. Neben der als Dienst gepackten Version bietet es auch den Shell-Skriptbefehl nowrap zur einfachen Auswahl und Änderung. Rufen Sie das Bin-Verzeichnis auf: Hinweis: mycat unterstützt die folgenden Befehle: { console | start | stop | restart | status | dump } Konfigurationsdateien werden im Verzeichnis Das Die Protokolle werden in 3. Start und Starteinstellungen des MyCat-DienstesWenn MyCAT unter Linux bereitgestellt und gestartet wird, müssen Sie zunächst MYCAT_HOME in den Umgebungsvariablen des Linux-Systems konfigurieren. Der Vorgang ist wie folgt: [root@xuegod63 local]# vim /etc/profile.d/mycat.sh #Erstellen Sie die Datei mycat.sh im Verzeichnis /etc/profile.d und schreiben Sie Folgendes. MYCAT_HOME=/usr/local/mycat PATH=$MYCAT_HOME/bin:$PATH [root@xuegod63 local]# source /etc/profile.d/mycat.sh #Umgebungsvariablen wirksam machen Wenn ein MyCAT-Cluster auf mehreren Linux-Systemen aufgebaut ist, müssen Sie die Zuordnung anderer IP-Adressen und Hostnamen auf dem Server konfigurieren, auf dem sich der MyCAT-Server befindet. Die Konfiguration erfolgt wie folgt: vi /etc/hosts Beispiel: Ich habe 3 Maschinen mit der folgenden Konfiguration: IP-Hostname: 192.168.1.63 xuegod63.cn 192.168.1.64 xuegod64.cn 192.168.1.65 xuegod65.cn Speichern Sie die Datei nach der Bearbeitung. Das Benutzerkonto und die Autorisierungsinformationen von mycat werden in der Datei conf/server.xml konfiguriert [root@xuegod63 lokal]# vim /usr/local/mycat/conf/server.xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mycat:server SYSTEM "server.dtd"> <mycat:server xmlns:mycat="http://org.opencloudb/"> <System> <Eigenschaftsname="defaultSqlParser">Druidenparser</Eigenschaft> </system> <!--Die folgenden Einstellungen gelten für die Berechtigungen des Anwendungszugriffskontos--> Zeile 34 <user name="root"> #Definieren Sie den Administratorbenutzer, d. h. den Benutzernamen für die Verbindung mit Mycat <property name="password">123456</property> #Passwort <property name="schemas">ha</property> #Definieren Sie eine logische Bibliothek, die der Schemakonfigurationsdatei entspricht </user> <!--Die folgenden Einstellungen gelten für schreibgeschützte Kontenberechtigungen--> <Benutzername="Benutzer"> <property name="password">Benutzer</property> <Eigenschaftsname="Schemata">ha</Eigenschaft> <Eigenschaftsname="readOnly">wahr</Eigenschaft> </Benutzer> </mycat:server> Bearbeiten Sie die MyCAT-Konfigurationsdatei schema.xml. Die Konfigurationsinformationen zu dataHost lauten wie folgt : [root@xuegod63 lokal]# mv /usr/local/mycat/conf/schema.xml /usr/local/mycat/conf/schema.xml.bak #Sichern Sie die Originaldatei. [root@xuegod63 local]# vim /usr/local/mycat/conf/schema.xml Erstellen <?xml version="1.0"?> <!DOCTYPE mycat:schema SYSTEM "schema.dtd"> < mycat:schema xmlns:mycat="http://org.opencloudb/"> < Schemaname = "ha" checkSQLschema = "false" sqlMaxLimit = "100" Datenknoten = 'dn1'> </ schema > < dataNode name="dn1" dataHost="dthost" database="ha"/> < dataHost name="dthost" maxCon="500" minCon="10" balance="1" Schreibtyp = "0" Datenbanktyp = "mysql" Datenbanktreiber = "native" Schaltertyp = "-1" Slave-Schwellenwert="100"> < Herzschlag >Benutzer auswählen() </Herzschlag> < writeHost host="xuegod64.cn" url="192.168.1.64:3306" Benutzer="mycat" Passwort="123456"> </writeHost> < writeHost host="xuegod65.cn" url="192.168.1.65:3306" benutzer="mycat" Passwort="123456"> </writeHost> </ dataHost > </ mycat:schema > Grün ist der Name der physisch vorhandenen Datenbank. Hinweis: Das Schema- Tag wird verwendet, um die logische Bibliothek in der MyCat-Instanz zu definieren. Auf Name: folgt der Name der logischen Bibliothek. MyCat kann mehrere logische Bibliotheken haben, und jede logische Bibliothek hat ihre eigene zugehörige Konfiguration. Sie können Schema-Tags verwenden, um diese verschiedenen logischen Bibliotheken zu unterteilen. Das Attribut checkSQLschema ist standardmäßig auf false eingestellt. Das offizielle Dokument besagt, ob der Datenbankname vor der Tabelle entfernt werden soll: „select * from db1.testtable“. Wenn auf true gesetzt, wird db1 entfernt. Wenn der Name von db1 jedoch nicht der Name des Schemas ist, wird es nicht entfernt. Daher wird offiziell empfohlen, diese Syntax nicht zu verwenden. Standardmäßig ebenfalls auf „False“ gesetzt. sqlMaxLimit Wenn der Wert auf eine bestimmte Zahl eingestellt ist. Wenn für jede ausgeführte SQL-Anweisung keine Limit-Anweisung vorhanden ist, fügt MyCat automatisch den entsprechenden Wert hinzu. Wenn der Wert beispielsweise auf 100 gesetzt ist und „select * from test_table“ ausgeführt wird, ist das Ergebnis „select * from test_table limit 100“. Das dataNode-Tag definiert die Datenknoten in MyCat, die wir normalerweise als Datensplitter bezeichnen. Ein dataNode-Label ist ein unabhängiger Daten-Shard . Sowohl die writeHost- als auch die readHost-Tags geben die Konfiguration der Back-End-Datenbank an und werden zum Instanziieren des Back-End-Verbindungspools verwendet. Der einzige Unterschied besteht darin, dass writeHost die Schreibinstanz und readHost die Leseinstanz angibt. In einem DataHost können mehrere WriteHosts und ReadHosts definiert werden. Wenn jedoch die vom WriteHost angegebene Backend-Datenbank ausfällt, sind alle an diesen WriteHost gebundenen ReadHosts nicht verfügbar. Da dieser WriteHost andererseits ausgefallen ist, erkennt das System dies automatisch und wechselt zum Backup-WriteHost. Die Attribute dieser beiden Tags sind gleich Es sind zwei Parameter zu beachten: Balance und SwitchType. Unter diesen bezieht sich „Balance“ auf den Lastausgleichstyp. Derzeit gibt es 4 Werte: (2) balance="0", der Lese-Schreib-Trennmechanismus ist nicht aktiviert und alle Lesevorgänge werden an den aktuell verfügbaren WriteHost gesendet; switchType bezieht sich auf den Umschaltmodus und derzeit gibt es 4 mögliche Werte: (1) switchType='-1' bedeutet keine automatische Umschaltung; Nachdem die beiden oben genannten Schritte abgeschlossen sind, können Sie in das Verzeichnis /usr/local/mycat/bin gehen und ./mycat start ausführen, um den Mycat-Dienst zu starten! [root@xuegod63 lokal]# /usr/local/mycat/bin/mycat start [root@xuegod63 ~]# cat /usr/local/mycat/logs/wrapper.log #Protokoll anzeigen und erfolgreich starten 4. Konfigurieren Sie MySQL Master-SlaveInstallieren Sie MySQL und laden Sie mysql-5.7.tar.gz auf xuegod64 hoch. [root@xuegod64 ~]# systemctl starte mysqld [root@xuegod64 ~]# echo "validate-password=OFF">> /etc/my.cnf [root@xuegod64 ~]# systemctl restart mysqld Plugin zur Prüfung der Kennwortstärke deaktivieren [root@xuegod64 ~]# systemctl starte mysqld [root@xuegod64 ~]# echo "validate-password=OFF">> /etc/my.cnf [root@xuegod64 ~]# systemctl restart mysqld Ändern des Root-Benutzerkennworts [root@xuegod64 ~]# grep "Passwort" /var/log/mysqld.log [root@xuegod64 ~]# mysql -uroot -p'-NEjo1gbPllh' mysql> Kennwort für root@localhost festlegen = Kennwort('123456'); mysql> beenden Eine andere Maschine [root@xuegod65 ~]# tar xf mysql-5.7.tar.gz [root@xuegod65 ~]# yum install -y ./mysql*.rpm Plugin zur Prüfung der Kennwortstärke deaktivieren [root@xuegod65 ~]# systemctl starte mysqld [root@xuegod65 ~]# echo "validate-password=OFF">> /etc/my.cnf [root@xuegod65 ~]# systemctl restart mysqld Ändern des Root-Benutzerkennworts [root@xuegod65~]# grep "Passwort" /var/log/mysqld.log [root@xuegod65 ~]# mysql -uroot -p'%OrrfGwyM6tS' mysql> Kennwort für root@localhost festlegen = Kennwort('123456'); mysql> beenden Erstellen einer Datenbank und Testdaten [root@xuegod64 ~]# mysql -uroot -p123456 mysql> Datenbank erstellen ha; mysql> verwende ha; mysql> Tabelle erstellen Test (ID int, Name varchar (20)); mysql> in Testwerte einfügen (1, 'man'); [root@xuegod64 ~]# mysqldump -uroot -p123456 -B ha >HA.sql #Sie können die Datenbank exportieren Übertragen Sie die exportierte Datenbank auf den Slave-Server [root@xuegod64 ~]# scp HA.sql [email protected]:/root/ xuegod65 betreibt den Dienst: Datenbank und Tabelle für Lesevorgang importieren: [root@xuegod65 ~]# mysql -uroot -p123456<HA.sql [root@xuegod64 ~]# vim /etc/my.cnf log-bin=mysql-bin-master #Binärprotokoll aktivieren server-id=1 #Lokale Datenbank-ID mark binlog-do-db=ha #Repository, das vom Server kopiert werden kann, Name der Binärdatenbank, die synchronisiert werden muss binlog-ignore-db=mysql #Repository, das nicht vom Server kopiert werden kann [root@xuegod64 ~]# systemctl restart mysqld [root@xuegod64 ~]# mysql -uroot -p'123456' Autorisieren Sie mycat, sich beim Datenbankkonto und dem Master-Slave-Replikationskonto anzumelden mysql> GEWÄHREN SIE ALLE PRIVILEGIEN FÜR *.* AN 'mycat'@"%", IDENTIFIZIERT DURCH "123456"; mysql> gewähre Replikations-Slave auf *.* dem Slave@"192.168.1.%", identifiziert durch "123456"; mysql> beenden [root@xuegod65 ~]# vim /etc/my.cnf log-bin=mysql-bin-slave #Binärprotokoll aktivieren server-id=2 #Lokale Datenbank-ID mark binlog-do-db=ha #Repository, das vom Server kopiert werden kann, Name der Binärdatenbank, die synchronisiert werden muss binlog-ignore-db=mysql #Repository, das nicht vom Server kopiert werden kann [root@xuegod65 ~]# systemctl restart mysqld [root@xuegod65 ~]# mysql -uroot -p'123456' Autorisieren Sie mycat, sich beim Datenbankkonto und dem Master-Slave-Replikationskonto anzumelden mysql> GEWÄHREN SIE ALLE PRIVILEGIEN FÜR *.* AN 'mycat'@"%", IDENTIFIZIERT DURCH "123456"; mysql> gewähre Replikations-Slave auf *.* dem Slave@"192.168.1.%", identifiziert durch "123456"; mysql> ändere Master in Master_Host = '192.168.1.64', Master_Benutzer = 'Slave', Master_Passwort = '123456'; mysql> Slave starten; #Slave starten mysql> show slave status\G #Überprüfen Sie den Status. Es gibt zwei Ja-Antworten. Die Master-Slave-Synchronisation war erfolgreich! mysql> beenden Slave-Ausfall simulieren: Der Slave-Server ist ausgefallen [root@xuegod65 ~]# systemctl stop mysqld Testen Sie Lesen und Schreiben auf dem Client [root@xuegod63 ~]# mysql -uroot -p123456 -h 192.168.1.63 -P8066 mysql> verwende ha; mysql> wähle * aus Test; Dies bedeutet, dass die Lesevorgangsroute auf den Master umgeschaltet wurde und keine externen Auswirkungen mehr auftreten! [root@xuegod65 ~]# systemctl starte mysqld Masterausfall simulieren: Der Masterserver ist ausgefallen [root@xuegod64 ~]# systemctl stop mysqld Testen Sie Lesen und Schreiben auf dem Client [root@xuegod63 ~]# mysql -uroot -p123456 -h 192.168.1.63 -P8066 mysql> verwende ha; mysql> Tabelle test1 erstellen (id int); FEHLER 1184 (HY000): Verbindung abgelehnt. #Die Masterdatenbank ist ausgefallen, daher sind Schreibvorgänge nicht möglich, das Lesen ist jedoch nicht betroffen. mysql> wähle * aus Test; [root@xuegod64 ~]# systemctl starte mysqld Test der schreibgeschützten Benutzeranmeldung mysql -u Benutzer -puser -h 192.168.1.201 -P8066 mysql> in Testwerte einfügen (5, „feng“); FEHLER 1495 (HY000): Benutzer hat nur Lesezugriff mysql> wähle * aus ha.test; +------+--------+ | Ich würde | Name | +------+--------+ | 1 | CD | 5. Automatischer Wechsel zum Slave-Knoten nach dem Absturz des tatsächlichen KnotensKonfigurieren Sie die MM-Modus-Master-Slave-Replikationsumgebung, um 65 als Master von 64 zu aktivieren [root@xuegod64 ~]# mysql -uroot -p'123456' mysql> ändere Master in Master_Host = '192.168.1.65', Master_Benutzer = 'Slave', Master_Passwort = '123456'; mysql> Slave starten; #Slave starten mysql> show slave status\G #Überprüfen Sie den Status. Es gibt zwei Ja-Antworten. Die Master-Slave-Synchronisation war erfolgreich! mysql> beenden 1. Optimieren und passen Sie die Mycat-Konfigurationsdatei an[root@xuegod63 ~]# vim /usr/local/mycat/conf/schema.xml <?xml version="1.0"?> <!DOCTYPE mycat:schema SYSTEM "schema.dtd"> <mycat:schema xmlns:mycat="http://org.opencloudb/"> <schema name="ha" checkSQLschema="false" sqlMaxLimit="100" Datenknoten = 'dn1'> </schema> <dataNode name="dn1" dataHost="dthost" database="ha"/> <dataHost name="dthost" maxCon="500" minCon="10" balance="1" Schreibtyp = "0" Datenbanktyp = "mysql" Datenbanktreiber = "native" Schaltertyp = "1" SlaveThreshold="100"> <heartbeat>Benutzer auswählen()</heartbeat> <writeHost host="xuegod64.cn" url="192.168.1.64:3306" Benutzer="mycat" Passwort="123456"> </writeHost> <writeHost host="xuegod65.cn" url="192.168.1.65:3306" Benutzer="mycat" Passwort="123456"> </writeHost> </dataHost> </mycat:schema> Wir haben zuvor switchType="-1" konfiguriert, um die automatische Umschaltung zu deaktivieren. Wir sollten jedoch vermeiden, in einer Master-Slave-Umgebung Daten auf den Slave-Knoten zu schreiben, da dies sonst zu Inkonsistenzen zwischen den Master- und Slave-Datenbanken führt. Wenn wir den MM-Modus verwenden, wechselt der Master-Knoten nach einem Fehler automatisch zum Backup-Knoten, was das Schreiben von Daten nicht beeinträchtigt. [root@xuegod63 ~]# /usr/local/mycat/bin/mycat neu starten [root@xuegod64 ~]# systemctl stop mysqld [root@xuegod63 ~]# mysql -uroot -p123456 -h 192.168.1.63 -P8066 MySQL [(keine)]> in ha.test-Werte einfügen (666, 'mk'); MySQL [(keine)]> wähle * aus ha.test; +------+---------+ | Ich würde | Name | +------+---------+ | 1 | Mann | | 666 | mk | 2. Stoppen Sie den Masterknoten:[root@xuegod64 ~]# systemctl stop mysqld Mycat fährt mit dem Einfügen von mysql> in Testwerte (5, 'feng') fort. 3. Stellen Sie den Masterknoten wieder her:[root@xuegod64 ~]# systemctl starte mysqld mysql -uroot -p123456 wähle * aus ha.test; Was die Verwendungsvorschläge betrifft, so wurde in einigen CMS-Systemen (Content Management System) der zugrunde liegende Datenbankcode gekapselt. Es ist derzeit nicht ratsam, mycat zu verwenden, da die gekapselten SQL-Anweisungen mit mycat nicht kompatibel sind. Es wird empfohlen, bei der Entwicklung eines Programms zu berücksichtigen, ob die Art der Verbindung mit MySQL mit mycat kompatibel ist. Oder wählen Sie andere Middleware wie beispielsweise einen MySQL-Proxy. Oben sind die Details, wie Linux MyCat verwendet, um eine Trennung von Lesen und Schreiben in MySQL-Master und -Slave zu erreichen. Weitere Informationen zu Linux MySQL finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM! Das könnte Sie auch interessieren:
|
<<: So implementieren Sie On-Demand-Import und globalen Import in Element-Plus
>>: Beispielcode für CSS-Spalten zum Erreichen eines zweiseitig ausgerichteten Layouts
Inhaltsverzeichnis 1. Was ist ein Abschluss? 1.2 ...
In diesem Artikel wird hauptsächlich die Breadcru...
Ist Leistung wirklich wichtig? Leistung ist wicht...
Inhaltsverzeichnis 1. Überprüfen Sie den Status d...
Inhaltsverzeichnis Einführung Einführung Aggregat...
Inhaltsverzeichnis Komponente zur Leistungsoptimi...
In diesem Artikelbeispiel wird der spezifische Co...
Auslassungspunkte werden angezeigt, wenn mehrzeil...
Informationen zur Überprüfung der Kennwortstärke:...
Inhaltsverzeichnis 1 Die Rolle von Apache 2 Apach...
Im offiziellen Dokument heißt es: Durch Einfügen ...
Heureka: 1. Erstellen Sie ein JDK-Image Starten S...
Eine kurze Einführung in protobuf Protobuf ist Go...
Inhaltsverzeichnis 1. Projektanforderungen 2. Dok...
Einführung: Im Vergleich zu herkömmlichen Bildver...