Einführung in das Datenbankimport- und -exporttool BatchTool

Leistungsvergleich

Im Leistungsexperiment werden die Software, Versionen und Systemressourcen verwendet, wie in der folgenden Tabelle dargestellt:

Testtabelle

Die Testtabelle ist eine Lineitem-Tabelle mit TPC-H-Spezifikationen mit insgesamt 59,98 Millionen Zeilen. Die Größe der exportierten einzelnen CSV-Datei beträgt 7,4 GB.

CREATE TABLE `lineitem` (
  `l_orderkey` bigint(20) NOT NULL,
  `l_partkey` int(11) NOT NULL,
  `l_suppkey` int(11) NOT NULL,
  `l_linenumber` bigint(20) NOT NULL,
  `l_quantity` decimal(15,2) NOT NULL,
  `l_extendedprice` decimal(15,2) NOT NULL,
  `l_discount` decimal(15,2) NOT NULL,
  `l_tax` decimal(15,2) NOT NULL,
  `l_returnflag` varchar(1) NOT NULL,
  `l_linestatus` varchar(1) NOT NULL,
  `l_shipdate` date NOT NULL,
  `l_commitdate` date NOT NULL,
  `l_receiptdate` date NOT NULL,
  `l_shipinstruct` varchar(25) NOT NULL,
  `l_shipmode` varchar(10) NOT NULL,
  `l_comment` varchar(44) NOT NULL,
  PRIMARY KEY (`l_orderkey`,`l_linenumber`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

Datenausgabe

Testergebnisse

Hinweis: mysqldump unterstützt den Export in CSV-Dateien, ist jedoch auf die Funktion „select... into outfile“ des Servers MySQL angewiesen. Die in diesem Artikel verwendete Cloud-Datenbank lässt diese Funktion nicht zu, daher testen wir hier nur die Effizienz des nativen Exports von mysqldump zu SQL-Dateien.
Wenn mysqldump Daten in eine SQL-Datei exportiert, werden automatisch mehrere Datenzeilen in eine Batch-Insert-Anweisung zusammengefügt. Die Größe der Anweisung wird durch den Parameter net-buffer-length gesteuert. Die Standardgröße beträgt 1 MB; wenn Sie sie verbessern möchten Wenn die Leistung nachfolgender Importe beeinträchtigt ist, können Sie sie entsprechend anpassen. Größer als dieser Wert.

Wenn BatchTool verteilte PolarDB-X-Tabellen importiert, wird die Leistung im Vergleich zur mysqldump-Methode erheblich verbessert. Dies liegt daran, dass BatchTool an PolarDB-X-Partitionstabellen angepasst ist und nach Erhalt der Metadaten der logischen Tabelle mehrere Verbindungen gleichzeitig herstellen kann. Exportieren Sie physische Tabellen des zugrunde liegenden Speichers parallel, um die Netzwerkbandbreite voll auszunutzen.

Datenimport

Testergebnisse

Hinweis: Bei jeder Importtestrunde wird eine neue leere Tabelle für den Import erstellt.

  • Quellimport-SQL-Datei:

Der gesamte Prozess des Importierens von SQL-Dateien mithilfe der Quelle wird seriell ausgeführt. Da mysqldump jedoch beim Exportieren in SQL-Dateien bereits Batch-Insert-Anweisungen gespleißt hat, ist die Importeffizienz nicht zu gering.

  • Datenimport-CSV-Datei laden:

Obwohl Ladedaten in MySQL auch in einem einzelnen Thread ausgeführt werden, ist ihre Ausführungseffizienz immer noch viel höher als die beim Quellimport von SQL-Dateien, da Ladedaten nur Textdateien über das Netzwerk übertragen müssen und nicht über SQL laufen müssen bei Ausführung auf der MySQL-Seite. Prozesse analysieren und optimieren. Um die Leistung weiter zu verbessern, müssen Sie die Datei manuell aufteilen und mehrere Datenbankverbindungen öffnen, um die Datenbank parallel zu importieren.

In PolarDB-X ist das Laden von Daten jedoch relativ langsamer, da der Textstrom die Route auf dem Rechenknoten berechnen und diese dann in eine Batch-Insert-Anweisung zusammenfügen und zur Ausführung an den Speicherknoten senden muss, der dies nicht nutzen kann Hohe Leistung des nativen Ladedatenprotokolls von MySQL. Implementierung, daher ist die Leistung relativ gering.

  • BatchTool-Import-CSV-Datei:

Aus der Systemüberwachung können wir ersehen, dass die Netzwerkübertragungsbandbreite von BatchTool beim CSV-Import 39 MB/s erreichen kann, was mehr als dem Dreifachen der Ladedaten entspricht. Dies liegt daran, dass BatchTool auf dem Producer-Consumer-Modell basiert und das gleichzeitige Lesen einer einzelnen Datei und das anschließende gleichzeitige Senden von Batch-Insert-Anweisungen an die Datenbank unterstützt, wodurch die Hardwareressourcen auf der Stresstestmaschine vollständig genutzt werden und der Durchsatz beim Importieren von Daten verbessert wird .

Praktisches Szenario

Neben dem regulären parallelen Import und Export von Daten unterstützt BatchTool auch viele szenarioökologische Funktionen zur Datenmigration. Im Folgenden werden die Verwendung von BatchTool und die Parameter verschiedener integrierter Modi anhand verschiedener praktischer Szenarien vorgestellt.

Datenbankkonnektivität

BatchTool unterstützt den Import und Export verschiedener Datenbanken, die mit dem MySQL-Protokoll kompatibel sind. Die Parameter für die Verbindung zur Datenbank sind -h (Datenbankhost) -  P(Portnummer) -u (Benutzername) -  P (Passwort) -D $ (Zieldatenbank). Auf dieser Basis wird auch die Verbindung zur Loadbalance-Adresse unterstützt, zum Beispiel: -lb true -h "host1:3306,host2:3306" -uroot.

Hinweis: Die Parameter im Zusammenhang mit der Datenbankverbindung werden im Folgenden weggelassen und es werden nur die Parametereinstellungen im Zusammenhang mit Funktionen angezeigt.

Komplette Datenbankmigration

BatchTool unterstützt den gleichzeitigen Import oder Export der gesamten Datenbank, einschließlich aller Tabellenstrukturen und Tabellendaten. Wenn eine Bibliothek viele Tabellen enthält (z. B. Tausende von Tabellen), ist die Effizienz des Exports der Tabellenstruktur basierend auf mysqldump und der anschließenden Ausführung von Source zum Migrieren der Tabellenstruktur sehr gering, da der Prozess vollständig Single-Threaded ist .

BatchTool unterstützt die parallele Ausführung von DDL-Tabellenerstellungsanweisungen beim Lesen von Tabellenstruktur-SQL-Dateien und verbessert so die Effizienz.

Wenn der Befehlszeilenparameter -t $ (Tabellenname) angibt, handelt es sich um die Import- oder Exporttabelle. Wenn dieser Parameter nicht hinzugefügt wird, handelt es sich um den Import- oder Exportmodus der gesamten Datenbank.

Der den Metadaten entsprechende Befehlszeilenparameter lautet -DDL $ (Migrationsmodus). Es gibt drei Migrationsmodi:

  • NONE: Tabellenstruktur nicht migrieren (Standardwert)
  • NUR: Es wird nur die Tabellenstruktur migriert, nicht die Daten.
  • MIT: Tabellenstruktur und Daten migrieren

Beispielsweise wird die Tabellenstruktur aller Tabellen in der tpch-Bibliothek exportiert: -D tpch -o export -DDL only.

Dateiteilung exportieren

BatchTool unterstützt die Angabe der Anzahl der Exportdateien oder der maximalen Anzahl von Zeilen in einer einzelnen Datei. Für eigenständiges MySQL exportiert BatchTool standardmäßig eine Tabelle in eine Datei; für die verteilte Datenbank PolarDB-X exportiert BatchTool standardmäßig jede physische Tabelle unter einer Tabelle in eine Datei, d. h. die Anzahl der Dateien entspricht der Anzahl der Partitionen. Slices. Auf dieser Grundlage gibt es zwei Parameter, die die Anzahl der exportierten Dateien beeinflussen können:

  • -F $(Anzahl der Dateien): Feste Anzahl exportierter Dateien, die gleichmäßig entsprechend der Gesamtdatenmenge der Tabelle aufgeteilt wird
  • -L $ (maximale Zeilenanzahl): Gibt die maximale Zeilenanzahl in einer einzelnen Datei an. Wenn die Zeilenanzahl in einer einzelnen Datei diesen Grenzwert erreicht, wird eine neue Datei geöffnet, um mit dem Schreiben fortzufahren.

Exportieren Sie beispielsweise jede Tabelle in der tpch-Bibliothek in eine separate CSV-Datei: -D tpch -o export -s, -F 1.

Importieren und exportieren Sie bestimmte Spalten

BatchTool unterstützt den Import oder Export bestimmter Spalten einer angegebenen Tabelle. Der entsprechende Befehlszeilenparameter lautet -col „$(durch Semikolon getrennter Spaltenname)“. Geben Sie beispielsweise die Spalten c_name, c_address und c_phone der zu exportierenden Kundentabelle, durch Kommas getrennt, und die erste Zeile der Dateiausgaben an der Feldname: -o export - t customer -col "c_name;c_address;c_phone" -s , -header true.

Dokumente verschlüsseln

BatchTool unterstützt die Streaming-Ausgabe als verschlüsselte Chiffretextdaten beim Exportieren von Dateien und vermeidet so den manuellen Verschlüsselungsvorgang nach dem Exportieren von Klartextdaten. Außerdem unterstützt es das direkte Lesen verschlüsselter Dateien für den Datenimport (der richtige Schlüssel muss bereitgestellt werden), um wiederholte Entschlüsselungsvorgänge zu vermeiden. Derzeit werden zwei Verschlüsselungsalgorithmen unterstützt:

  • AES-CBC
  • SM4-EZB

Der entsprechende Befehlszeilenparameter ist -enc (Verschlüsselungsalgorithmus)−  Schlüssel (Schlüssel). Verwenden Sie beispielsweise den AES-Algorithmus, um die Kundentabellendaten zu verschlüsseln und in eine Datei zu exportieren, und geben Sie den Schlüssel als „admin123456“ an: -o export -s, -t sbtest1 -enc AES -key admin123456 -F 1.

Dateikomprimierung

BatchTool unterstützt die Streaming-Ausgabe in komprimierte Dateien beim Exportieren von Dateien, um den Speicherplatzverbrauch zu reduzieren; es unterstützt auch das direkte Lesen komprimierter Dateien zum Importieren von Daten, um wiederholte Vorgänge zum Dekomprimieren von Daten zu vermeiden. Der entsprechende Befehlszeilenparameter ist -comp $ (Komprimierungsalgorithmus), zum Beispiel:

1. Exportieren Sie die Kundentabelle als GZIP-komprimierte Datei. Das Feldtrennzeichen ist Komma (,): -o export -t customer -s , -comp GZIP
2. Importieren Sie alle GZIP-komprimierten Dateien im Kundendatenverzeichnis in die Tabelle customer_2 , das Feldtrennzeichen ist Komma (,): -o import -t customer -s , -comp GZIP -dir data-test

Datei Format

BatchTool unterstützt den Import und Export der folgenden Dateiformate:

  • CSV (durch bestimmte Zeichen getrennte Textdatei)
  • XLS, XLSX (Excel-Tabelle, Binärdatei)
  • ET (WPS-Formular, Binärdatei)

Der entsprechende Befehlszeilenparameter ist -format $ (Dateiformat), um beispielsweise die Kundentabelle in eine Tabelle im XLSX-Format zu exportieren: -o export -t customer -format XLSX.

Datendesensibilisierung

Oftmals kann die exportierte Tabelle vertrauliche Daten wie Name, ID-Nummer, Mobiltelefonnummer, E-Mail-Adresse und andere persönliche Informationen enthalten. In diesem Fall müssen die vertraulichen Daten durch bestimmte Algorithmen verarbeitet und unscharf gemacht werden, wodurch die Daten unbrauchbar werden identifiziert oder wiederhergestellt werden. , um so die Datensicherheit zu schützen und Datenlecks zu verhindern;

Dieser Vorgang wird auch Datendesensibilisierung genannt. BatchTool integriert eine einfache Daten-Desensibilisierungsfunktion. Durch einfache Konfiguration können die angegebenen Feldwerte beim Exportieren von Tabellendaten desensibilisiert und dann in eine Datei ausgegeben werden. Zu den von BatchTool unterstützten Desensibilisierungsalgorithmen gehören die folgenden vier:

  • Maske : Bei der Maskendesensibilisierung werden im Allgemeinen Sonderzeichen (* usw.) verwendet, um den wahren Wert für Zeichenfolgendaten zu ersetzen, was in Feldern wie Mobiltelefonnummern und ID-Nummern üblich ist.
  • Verschlüsselung : (Symmetrische) Verschlüsselung ist eine spezielle reversible Desensibilisierungsmethode, die einen bestimmten Verschlüsselungsalgorithmus und Schlüssel zum Verschlüsseln sensibler Felder verwendet. Benutzer mit geringen Berechtigungen ohne Schlüssel sehen nur bedeutungslose Chiffretextdaten und in einigen Fällen unter besonderen Szenarioanforderungen das Original Auf die Daten kann auch durch Entschlüsselung mithilfe des Schlüssels zugegriffen werden.
  • Hash-Zusammenfassung : Die Methode zur Berechnung des Zusammenfassungswerts durch Hashing wird häufig für Zeichenfolgendaten verwendet. Beispielsweise schützt das Ersetzen der Zeichenfolge des Benutzernamens „PolarDB-X“ durch „d7f19613a15dcf8a088c73e2c7e9b856“ die Privatsphäre des Benutzers, und Sie können auch Salt angeben, um es zu vermeiden Hashing. Das Knacken des griechischen Wertes;
  • Rundung : Die Rundungs-Desensibilisierungsmethode wahrt die Sicherheit der Daten und stellt gleichzeitig die ungefähre Authentizität des Bereichs sicher. Beispielsweise wird das Datumsfeld vom ursprünglichen Wert „2023-11-11 15:23:41“ auf „2023“ gerundet – 11-11 15:00:00“ ausgegeben.

Der entsprechende Befehlszeilenparameter ist -mask $ (Konfiguration des Desensibilisierungsalgorithmus). Am Beispiel der Kundentabelle des TPC-H-Datensatzes zeigen die exportierten Tabellendaten nur die ersten drei und letzten vier Ziffern der Mobiltelefonnummer c_phone an (Sie können hier die Yaml-Konfigurationsdatei anstelle der Befehlszeilenparameter verwenden). :

operation: export
# 使用 | 作为字段分隔符,特殊字符需要使用引号括起
sep: "|"
table: customer
# 按照主键c_custkey进行排序
orderby: asc
orderCol: c_custkey
# 输出字段名
header: true
# 指定脱敏算法,只展示前三位与末四位
mask: >-
   {
     "c_phone": {
       "type": "hiding",
       "show_region": "0-2",
       "show_end": 4
     }
   }

Rohdaten

c_custkey|c_name|c_address|c_nationkey|c_phone
1|Customer#000000001|IVhzIApeRb ot,c,E|15|25-989-741-2988
2|Customer#000000002|XSTf4,NCwDVaWNe6tEgvwfmRchLXak|13|23-768-687-3665
3|Customer#000000003|MG9kdTD2WBHm|1|11-719-748-3364
...

Daten nach Desensibilisierung

c_custkey|c_name|c_address|c_nationkey|c_phone
1|Customer#000000001|IVhzIApeRb ot,c,E|15|25-********2988
2|Customer#000000002|XSTf4,NCwDVaWNe6tEgvwfmRchLXak|13|23-********3665
3|Customer#000000003|MG9kdTD2WBHm|1|11-********3364
...

TPC-H-Import

TPC-H ist ein Benchmark-Test der analytischen Abfragefähigkeiten einer Reihe von Datenbanken, die in der Branche häufig verwendet werden. Der herkömmliche TPC-H-Datensatzimport besteht darin, mit dem tpck-kit-Toolsatz zunächst einen Textdatensatz im CSV-Format auf der Festplatte zu generieren und ihn dann über Datenimportmethoden wie Daten laden in die Datenbank zu schreiben; bei dieser Methode nicht Es ist lediglich erforderlich, die entsprechenden Daten auf dem Festplattenspeicherplatz der Presse zu reservieren (für TPC-H 1T-Tests muss beispielsweise mindestens 1 T Speicherplatz reserviert werden), und sowohl die Datengenerierungs- als auch die Datenimportphase müssen parallelisiert werden Schreiben von Skripten, was im Allgemeinen ineffizient ist. .

BatchTool verfügt über eine integrierte Komponente zum Generieren von TPC-H-Datensätzen. TPC-H-Daten können direkt in die Datenbank gestreamt werden, ohne dass zuvor Textdaten generiert werden müssen, was die Effizienz erheblich verbessert.

Der entsprechende Befehlszeilenparameter lautet -o import -benchmark tpch -scale $ (Datensatzgröße). Beispielsweise dauert der Import eines 100-GB-TPC-H-Datensatzes mit der herkömmlichen Methode 10 Minuten zum Generieren einer Textdatei und 42 Minuten zum Importieren von Ladedaten, also insgesamt 52 Minuten. Verwenden Sie jedoch BatchTool zum Importieren Online dauert nur 28 Minuten und nimmt keine zusätzliche Zeit in Anspruch. Speicherplatz zur Verbesserung der Effizienz der Benchmark-Testvorbereitung.

Zusammenfassen

Im Allgemeinen weist das Datenbankimport- und -exporttool BatchTool die folgenden Merkmale auf:

  • Leicht, plattformübergreifend
  • Hohe Leistung (Modelloptimierung durchführen, verteilte Anpassung)
  • Unterstützt eine Fülle von Funktionen und ist für verschiedene Szenarien geeignet

Darüber hinaus ist BatchTool auch Open Source auf Github, jeder ist herzlich willkommen, es auszuprobieren!

Ursprünglicher Link

Dieser Artikel ist Originalinhalt von Alibaba Cloud und darf nicht ohne Genehmigung reproduziert werden.

OpenAI öffnet ChatGPT kostenlos für alle Benutzer. Sprachprogrammierer manipulierten ETC-Guthaben und veruntreuten mehr als 2,6 Millionen Yuan pro Jahr. Spring Boot 3.2.0 wurde offiziell veröffentlicht. Google-Mitarbeiter kritisierten den Big Boss, nachdem er das Unternehmen verlassen hatte. Er war tief involviert Das Flutter-Projekt und formulierte HTML-bezogene Standards. Microsoft Copilot Web AI wird am 1. Dezember offiziell gestartet und unterstützt das Open-Source- Web-Framework Terminal Chat Rust von Microsoft. Rocket veröffentlicht v0.5: unterstützt asynchron, SSE, WebSockets usw. Der Vater von Redis implementiert das Telegram Bot-Framework mit reinem C-Sprachcode . Wenn Sie ein Open-Source-Projektbetreuer sind, stoßen Sie auf „Wie weit können Sie diese Art von Antwort ertragen?“ PHP 8.3 GA
{{o.name}}
{{m.name}}

Supongo que te gusta

Origin my.oschina.net/yunqi/blog/10293537
Recomendado
Clasificación