データベースのインポートおよびエクスポート ツール BatchTool の概要

性能比較

性能実験で使用したソフトウェア、バージョン、システムリソースは次の表のとおりです。

テストテーブル

テストテーブルはTPC-H仕様の行項目テーブルで、総行数は5,998万行、エクスポートした単一CSVファイルのサイズは7.4Gです。

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;

データ出力

試験結果

注: mysqldump は csv ファイルへのエクスポートをサポートしていますが、サーバー MySQL の select... into outfile 機能に依存しています。この記事で使用されているクラウド データベースではこの機能が許可されていないため、ここでは mysqldump のネイティブ エクスポートの効率のみをテストします。 SQLファイルに。
mysqldump がデータを SQL ファイルにエクスポートするとき、複数行のデータがバッチ挿入ステートメントに自動的に結合されます。ステートメントのサイズはパラメーター net-buffer-length によって制御されます。デフォルトのサイズは 1MB です。改善したい場合は、後続のインポートのパフォーマンスを考慮して、適切に調整できます。この値より大きい値です。

BatchTool が PolarDB-X 分散テーブルをインポートすると、mysqldump メソッドと比較してパフォーマンスが大幅に向上します。これは、BatchTool が PolarDB-X パーティション テーブルに適応しており、論理テーブルのメタデータを取得した後に複数の接続を同時に確立できるためです。基盤となるストレージの物理テーブルを並行してエクスポートして、ネットワーク帯域幅を最大限に活用します。

データインポート

試験結果

注: インポート テストの各ラウンドでは、インポート用に新しい空のテーブルが作成されます。

  • ソースインポートSQLファイル:

ソースを使用して SQL ファイルをインポートするプロセス全体はシリアルに実行されますが、mysqldump は SQL ファイルにエクスポートするときにすでにバッチ挿入ステートメントを結合しているため、インポート効率が低すぎることはありません。

  • データインポートCSVファイルを読み込みます:

MySQL では、ロード データもシングル スレッドで実行されますが、ロード データはネットワーク経由でテキスト ファイルを送信するだけでよく、SQL を経由する必要がないため、SQL ファイルをインポートするソースよりも実行効率がはるかに高くなります。 MySQL 側で実行される場合、プロセスを分析して最適化します。パフォーマンスをさらに向上させるには、ファイルを手動で分割し、複数のデータベース接続を開いてデータベースを並行してインポートする必要があります。

ただし、PolarDB-X では、テキスト ストリームがコンピューティング ノード上でルートを計算し、それをバッチ挿入ステートメントに結合して実行のためにストレージ ノードに送信する必要があるため、データのロードが比較的遅くなります。 MySQL のネイティブ ロード データ プロトコルは高いパフォーマンスで実装されているため、パフォーマンスは比較的低くなります。

  • BatchTool インポート CSV ファイル:

システム監視から、csv インポート時の BatchTool のネットワーク送信帯域幅は 39MB/s に達し、負荷データの 3 倍以上であることがわかります。これは、BatchTool がプロデューサー/コンシューマー モデルに基づいており、単一ファイルの同時読み取りとデータベースへのバッチ挿入ステートメントの同時送信をサポートしており、ストレス テスト マシン上のハードウェア リソースを最大限に活用し、データのインポート時のスループットを向上させるためです。 。

実践的なシナリオ

データの通常の並行インポートおよびエクスポートに加えて、BatchTool は、データ移行のための多くのシナリオ エコロジカル機能もサポートしています。以下では、BatchTool の使用法と、さまざまな実践的なシナリオに基づいたさまざまな組み込みモードのパラメーターを紹介します。

データベース接続性

BatchTool は、MySQL プロトコルと互換性のあるさまざまなデータベースのインポートとエクスポートをサポートしています。データベースに接続するためのパラメータは、-h (データベース ホスト) -  p(ポート番号) -u (ユーザー名) -  p (パスワード) -D $ (ターゲット データベース) です。これに基づいて、ロードバランス アドレスへの接続もサポートします (例: -lb true -h "host1:3306,host2:3306" -uroot)。

注: 以下ではデータベース接続に関するパラメータは省略し、機能に関するパラメータ設定のみを示します。

データベース全体の移行

BatchTool は、すべてのテーブル構造とテーブル データを含むデータベース全体の一度のインポートまたはエクスポートをサポートします。ライブラリの下に多くのテーブルがある場合 (たとえば、数千のテーブル)、mysqldump に基づいてテーブル構造をエクスポートし、ソースを実行してテーブル構造を移行する効率は非常に低くなります。これは、プロセスが完全にシングルスレッドであるためです。 。

BatchTool は、テーブル構造 SQL ファイルの読み取り中に、DDL テーブル作成ステートメントの並列実行をサポートするため、効率が向上します。

コマンド ライン パラメーターで -t $ (テーブル名) を指定すると、それはインポート テーブルまたはエクスポート テーブルになり、このパラメーターが追加されない場合は、データベース全体のインポート モードまたはエクスポート モードになります。

メタデータに対応するコマンド ライン パラメーターは -DDL $ (移行モード) で、次の 3 つの移行モードがあります。

  • NONE: テーブル構造を移行しません (デフォルト値)
  • ONLY: データではなく、テーブル構造のみが移行されます。
  • WITH: テーブル構造とデータを移行する

たとえば、tpch ライブラリ内のすべてのテーブルのテーブル構造がエクスポートされます: -D tpch -o export -DDL のみ。

エクスポートファイルの分割

BatchTool は、エクスポート ファイルの数または 1 つのファイルの最大行数の指定をサポートしています。スタンドアロン MySQL の場合、BatchTool はデフォルトでテーブルをファイルにエクスポートします。分散データベース PolarDB-X の場合、BatchTool はデフォルトでテーブルの下の各物理テーブルをファイルにエクスポートします。つまり、ファイルの数はパーティションの数、スライス。これに基づいて、エクスポートされるファイルの数に影響を与える可能性のあるパラメーターが 2 つあります。

  • -F $(ファイル数): エクスポートされるファイルの固定数。テーブルの合計データ量に応じて均等に分割されます。
  • -L $ (最大行数): 1 つのファイルの最大行数を指定します。1 つのファイルの行数がこの制限に達すると、新しいファイルが開かれて書き込みが続行されます。

たとえば、tpch ライブラリ内の各テーブルを個別の csv ファイルにエクスポートします: -D tpch -o export -s, -F 1。

指定した列のインポートとエクスポート

BatchTool は、指定されたテーブルの特定の列のインポートまたはエクスポートをサポートしています。対応するコマンド ライン パラメーターは -col "$(セミコロンで区切られた列名)" です。たとえば、エクスポートする customer テーブルの c_name、c_address、および c_phone 列をコンマで区切って指定し、ファイル出力の最初の行を指定します。フィールド名: -o export - t customer -col "c_name;c_address;c_phone" -s 、 -header true。

文書を暗号化する

BatchTool は、ファイルのエクスポート時に暗号化された暗号文データとしてのストリーミング出力をサポートし、平文データのエクスポート後の手動暗号化操作を回避します。また、データ インポート時の暗号化ファイルの直接読み取りもサポートし (正しいキーを指定する必要があります)、復号化操作の繰り返しを回避します。現在、次の 2 つの暗号化アルゴリズムがサポートされています。

  • AES-CBC
  • SM4-ECB

対応するコマンド ライン パラメーターは、-enc (暗号化アルゴリズム)-  鍵 (キー) です。たとえば、AES アルゴリズムを使用して顧客テーブル データを暗号化してファイルにエクスポートし、キーを「admin123456」として指定します: -o export -s, -t sbtest1 -enc AES -key admin123456 -F 1。

ファイル圧縮

BatchTool は、ファイルのエクスポート時に圧縮ファイルへのストリーミング出力をサポートして、スペースの使用量を削減します。また、データをインポートするための圧縮ファイルの直接読み取りもサポートし、データの解凍操作を繰り返すことを回避します。対応するコマンド ライン パラメーターは -comp $ (圧縮アルゴリズム) です。次に例を示します。

1. customer テーブルを GZIP 圧縮ファイルとしてエクスポートします。フィールド区切り文字はカンマ (,) です: -o export -t customer -s , -comp GZIP
2. customer-data ディレクトリ内のすべての GZIP 圧縮ファイルをテーブル customer_2 にインポートします、フィールド区切り文字はカンマ (,) です: -o import -t customer -s , -comp GZIP -dir data-test

ファイル形式

BatchTool は、次のファイル形式のインポートとエクスポートをサポートしています。

  • CSV(指定文字区切り、テキストファイル)
  • XLS、XLSX(Excelテーブル、バイナリファイル)
  • ET(WPS形式、バイナリファイル)

対応するコマンド ライン パラメーターは -format $ (ファイル形式) です。たとえば、customer テーブルを XLSX 形式のテーブルにエクスポートする場合は、-o export -t customer -format XLSX となります。

データの非感作化

多くの場合、エクスポートされたテーブルには、名前、ID 番号、携帯電話番号、電子メール アドレス、その他の個人情報などの機密データが含まれる場合があります。この場合、機密データは特定のアルゴリズムを通じて処理され、ぼかされる必要があるため、データを保存できなくなります。識別または復元することで、データのセキュリティを保護し、データ漏洩を防ぎます。

このプロセスはデータの感度解除とも呼ばれます。BatchTool には簡易データの匿名化機能が組み込まれており、簡単な設定でテーブルデータのエクスポート時に指定したフィールド値を匿名化してファイルに出力できます。BatchTool でサポートされる感度解除アルゴリズムには、次の 4 つが含まれます。

  • マスク: マスクの感度解除では通常、特殊文字 (* など) を使用して文字列データの真の値を置き換えます。これは、携帯電話番号や ID 番号などのフィールドで一般的です。
  • 暗号化: (対称) 暗号化は、指定された暗号化アルゴリズムとキーを使用して機密フィールドを暗号化する、特別な可逆的感度解除方法です。キーを持たない低特権ユーザーには無意味な暗号文データのみが表示され、場合によっては、特殊なシナリオ要件の下では、元の暗号化データが表示されなくなります。データには、キーを使用した復号化を通じてアクセスすることもできます。
  • ハッシュ要約: ハッシュによって要約値を計算する方法は、文字列データによく使用されます。たとえば、ユーザー名「PolarDB-X」の文字列を「d7f19613a15dcf8a088c73e2c7e9b856」に置き換えることでユーザーのプライバシーを保護し、ソルトを指定して回避することもできますハッシュ: ギリシャ値のクラッキング。
  • 丸め: 丸め非感度化方法は、範囲の大まかな信頼性を確保しながらデータのセキュリティを維持します。たとえば、日付フィールドは元の値 "2023-11-11 15:23:41" から "2023" に丸められます。 11-11 15:00:00」が出力されます。

対応するコマンド ライン パラメーターは -mask $ (感度解除アルゴリズムの構成) です。TPC-H データ セットの顧客テーブルを例にとると、エクスポートされたテーブル データには、携帯電話番号 c_phone の最初の 3 桁と最後の 4 桁のみが表示されます (ここでは、コマンド ライン パラメーターの代わりに yaml 構成ファイルを使用できます)。 :

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
     }
   }

生データ

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
...

減感作後のデータ

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インポート

TPC-H は、業界で一般的に使用されている一連のデータベースの分析クエリ機能のベンチマーク テストです。従来の TPC-H データ セット インポートでは、tpck-kit ツール セットを使用して、最初にディスク上に csv 形式でテキスト データ セットを生成し、次にそれをデータのロードなどのデータ インポート メソッドを通じてデータベースに書き込みます。この方法はそうではありません。対応するデータを印刷機のディスク ストレージ スペースに予約するだけで済みます (たとえば、TPC-H 1T テストの場合、少なくとも 1 T のディスク スペースを予約する必要があります)。また、データ生成とデータ インポートの両方の段階を並列化する必要があります。スクリプトの作成は一般に非効率的です。

BatchTool には TPC-H データ セットを生成するためのコンポーネントが組み込まれており、事前にテキスト データを生成することなく TPC-H データをデータベースに直接ストリーミングできるため、効率が大幅に向上します。

対応するコマンド ライン パラメーターは、-o import -benchmark tpch -scale $ (データ セット サイズ) です。たとえば、100 GB の TPC-H データ セットをインポートする場合、従来の方法を使用したテキスト ファイルの生成には 10 分、負荷データのインポートには 42 分、合計 52 分かかります。オンラインにかかる時間はわずか 28 分で、ベンチマーク テストの準備の効率を向上させるための追加のディスク容量は必要ありません。

要約する

一般に、データベースのインポートおよびエクスポート ツールである BatchTool には次の特徴があります。

  • 軽量、クロスプラットフォーム
  • 高いパフォーマンス (モデルの最適化、分散適応の実行)
  • 豊富な機能をサポートし、さまざまなシーンに対応

さらに、BatchTool は github 上でオープンソースでもあるので、ぜひ試してみてください。

元のリンク

この記事は Alibaba Cloud のオリジナル コンテンツであり、許可なく複製することはできません。

OpenAI、ChatGPTを全ユーザーに無料公開 音声 プログラマーがETC残高を改ざんし年間260万元以上を横領 Spring Boot 3.2.0が正式リリース Google従業員が退社後の偉い人を批判 に深く関与Flutter プロジェクトと策定された HTML 関連標準 Microsoft Copilot Web AI が 12 月 1 日に正式にリリースされ、中国 Microsoft のオープンソース ターミナル チャットをサポート Rust Web フレームワーク Rocket が v0.5 をリリース: 非同期、SSE、WebSocket などを サポートRedis は、純粋な C 言語コードを使用して Telegram Bot フレームワークを実装します 。オープンソース プロジェクトのメンテナーであれば、「この種の応答にどこまで耐えることができますか?」という問題に遭遇します。 PHP 8.3 GA
{{名前}}
{{名前}}

おすすめ

転載: my.oschina.net/yunqi/blog/10293537