2

MySQL PHPデータベースにデータをアップロードするより高速な方法である巨大なデータセットがあり、とにかくすべてのデータがインポートされているかどうかを確認しています.

提案やヒントは大歓迎です。ありがとう。

4

2 に答える 2

0

データ セットが単純に巨大である (数時間以内に転送できる) 場合、効率的な方法を見つけようとする価値はありません。どのスクリプトでもジョブを実行できる必要があります。db 以外の形式 (例: プレーン テキスト) から読み込んでいると思いますか? そのように、単に読んで、挿入してください。

行を挿入する前に慎重な処理が必要な場合は、最初に実際のオブジェクトとそのサブオブジェクトをメモリ内に作成し、次にそれらを行とテーブルにマッピングすることを検討してください。ここでは、オブジェクト リレーショナル データ ソース パターンが役立ちます。ただし、これは非常に遅くなります。絶対に必要でない限り、特に 1 回だけ実行する場合はお勧めしません。

非常に高速なアクセスのために、オブジェクトの直接バイナリ blob をディスクに書き込み、それを配列に直接読み込む人もいますが、これは C/C++ などの言語で利用できます。スクリプト言語で使用できるかどうか、またはどのように使用できるかはわかりません。繰り返しますが、これは、DB に転送するのではなく、データをメモリに読み込むのに適しています。

データが転送されたことを確認する最も簡単な方法は、データベースのカウント (*) をファイル内のアイテム数と比較することです。より高度な方法は、主キー セットのハッシュ (sha1 など) を計算することです。

于 2013-06-27T12:50:13.003 に答える
0

LOAD DATAを使用しました。これは標準の MySql ローダー ツールです。それは正常に動作し、高速です。多くのオプションがあります。

使用できます:

  • export_du_histo_comlet.txt という名前のデータ ファイルには、次のような複数の行があります: "xxxxxxx.corp.xxxxxx.com";"GXTGENCDE";"GXGCDE001";"M_MAG105";"TERMINE";"2013-06-27";"14:08 :00";"14:08:00";"00:00:01";"795691"

  • SQLファイルを使用します(SQLファイルを呼び出すUnixシェルを使用しているため):

    LOAD DATA INFILE '/home2/soron/EXPORT_HISTO/export_du_histo_complet.txt'
            INTO TABLE du_histo
    FIELDS 
            TERMINATED BY ';'
            ENCLOSED BY '"'
            ESCAPED BY '\\'
    LINES
            STARTING BY ' '
            TERMINATED BY '\n'
    (server, sess, uproc, ug, etat, date_exploitation, debut_uproc, fin_uproc, duree, num_uproc)
    

インポートするテーブル フィールドを指定しました (テーブルには複数の列があります)

  • MySql のバグが存在するため、変数を使用して INFILE を指定することはできません。
于 2013-06-27T12:58:10.457 に答える