ホームページ  >  記事  >  バックエンド開発  >  PHP が TXT ファイルを処理して大量のデータをデータベースにインポートする_PHP チュートリアル

PHP が TXT ファイルを処理して大量のデータをデータベースにインポートする_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-14 10:10:08784ブラウズ

次の形式の 100,000 レコードを含む TXT ファイルがあります:

列1 列2 列3 列4 列5
a 00003131 0 0 加法#1 加法#1 加法#1
a 00003356 0 0 初期#1
a 00003553 0 0 新興#2 新興#2
a 00003700 0.25 0 反動的な#1

……………………背後には 100,000 行があります………………


要件は、それをデータベースにインポートすることです。データテーブルの構造は

です。

word_id 自動増分


word 【adductive#1 adducting#1 adducent#1】このTXTレコードは3つのSQLレコードに変換する必要があります


値 = 3 列目 - 4 列目; =0 の場合、このレコードはスキップされ、データテーブルに挿入されません

[php]
$file = 'words.txt';//10W レコードの TXT ソース ファイル
$lines = file_get_contents($file); ini_set('memory_limit', '-1');//Mem サイズを制限しないでください。制限しないと、エラーが報告されます
$line=explode("n",$lines); $i=0; $sql="words_sentiment (word,senti_type,senti_value,word_type) の値を挿入します

foreach($line as $key =>$li)
{
$arr=explode(" ",$li); $senti_value=$arr[2]-$arr[3]; If($senti_value!=0)
                                                            If($i>=20000&&$i                                                                 $mm=explode(" ",$arr[4]); FOREACH ($ MM AS $ M) // [Adductive#1 AdDucting#1 Adducent#1] この TXT レコードは 3 つの SQL レコードに変換する必要があります {

$nn=explode("#",$m); $word=$nn[0]; $sql.="("$word",1,$senti_value,2),";//ここで、単語には一重引用符 (ジャックなど) が含まれる可能性があるため、単語を含めるには二重引用符を使用する必要があることに注意してください。 (エスケープに注意)                                                                                                                                 $i++;                                                                             }
// $i をエコーし​​ます。 $sql=substr($sql,0,-1);//最後のカンマを削除します
// $sql をエコーし​​ます。 File_put_contents('20000-25000.txt', $sql); //一度に 5000 エントリのデータベースをバッチインポートすると、max_execution_time が足りなくなり失敗します
?>

$file = 'words.txt';//10W レコードの TXT ソース ファイル
$lines = file_get_contents($file);
ini_set('memory_limit', '-1');//Mem サイズを制限しないでください。制限しないとエラーが報告されます
$line=explode("n",$lines);
$i=0;
$sql="words_sentiment (word,senti_type,senti_value,word_type) の値に挿入 ";

foreach($line as $key =>$li)
{
$arr=explode(" ",$li);
$senti_value=$arr[2]-$arr[3];
if($senti_value!=0)
{
If($i>=20000&&$i {
$mm=explode(" ",$arr[4]); FOREACH ($ MM AS $ M) // [Adductive#1 AdDucting#1 Adducent#1] この TXT レコードは 3 つの SQL レコードに変換する必要があります {

$nn=explode("#",$m);
$word=$nn[0];
$sql.="("$word",1,$senti_value,2),";//ここで、単語には一重引用符 (ジャックなど) が含まれる可能性があるため、単語を含めるには二重引用符を使用する必要があることに注意してください。 (エスケープに注意) }
}
$i++;
                                                                              }
// $i をエコー;
$sql=substr($sql,0,-1);//最後のカンマを削除します
//エコー $sql;
File_put_contents('20000-25000.txt', $sql); //一度に 5000 エントリのデータベースをバッチインポートすると、max_execution_time が足りなくなり失敗します
?>

1. 大量のデータをインポートする場合は、PHP のいくつかの制限に注意する必要があります。一時的に調整しないと、エラーが報告されます。

許可されたメモリ サイズ 33554432 バイトが使い果たされました (16 バイトを割り当てようとしました)

2、PHPはTXTファイルを操作します

file_get_contents()

file_put_contents()

3. 大量にインポートする場合は、失敗の可能性を減らすためにバッチでインポートすることをお勧めします

4. 一括インポートの前に、スクリプトを複数回テストする必要があります (100 個のデータでテストするなど)。

5. インポート後も、PHP の mem_limit がまだ十分でない場合、プログラムは実行できません

(一時的なステートメントを使用する代わりに、php.ini を変更して mem_limit を増やすことをお勧めします)

http://www.bkjia.com/PHPjc/477529.html

www.bkjia.com

http://www.bkjia.com/PHPjc/477529.html技術記事次の形式の 100,000 レコードを含む TXT ファイルがあります: Column 1 Column 2 Column 3 Column 4 Column 5 a 00003131 0 0 adductive#1 adducting#1 adducent#1 a 00003356 0 0 nascent#1 a 00003553 0 0 em .. .
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。