4

mysql にロードしたい大きな xml ファイルがあります。非圧縮で約 20 GB ですが、元のサイズの約 25% まで圧縮してから、圧縮テーブルに一括アップロードできると思います。

データベース自体のデータを圧縮できることはわかっていますが、一括追加プロセス中に圧縮ファイルを読み取ることはできますか?

編集:圧縮とは、.gz.tarファイルなどを意味するものではありません。つまり、Java または C++ でファイルを作成しているときに gzip として出力しているため、ファイル自体は .csv または .xml であり、正しい構造を保持していますが、その中の項目 (各行) は圧縮されています。

これが不可能な場合は、一括アップロードのようなことをして、コンテンツを圧縮解除するプログラムでフィルタリングすることはできますか? ファイルをCで開き、mysqlにロードしながら圧縮することを考えていました。問題は、何百万もの個別の挿入ではなく、一括挿入でこれを行いたいことです。

4

3 に答える 3

10

これには、間違いなくLOAD DATA INFILEを使用する必要があります。特に大きなファイルでは、挿入は LOAD DATA INFILE よりも桁違いに遅くなる可能性があります。

残念ながら、MySQL は圧縮ファイルの直接ロードをネイティブでサポートしていません (私が知る限り)。ただし、上記の LOAD DATA INFILE リンクを見ると、パイプからテーブルにデータを直接ロードするトリックがあります (ページで「パイプ」を検索するだけです)。その方法を使用してファイルを解凍し、出力を MySQL にパイプできると思いますが、圧縮/解凍は、圧縮されていないファイルを直接ロードするよりも明らかに遅くなります。

于 2012-06-12T15:13:25.637 に答える
2

システム上の他のすべてのユーザーがパイプに書き込めるようにする場合を除き、「--mode=-666」は使用しないでください。「--mode=-600」を使用し、パイプをローカル ホーム ディレクトリに保持して、不正アクセスのリスクを減らします。

于 2015-08-06T16:07:53.460 に答える