PHPはTXTファイルを処理してデータベースに大量のデータを導入する

2100 ワード

10万件の記録を含むTXTファイルがあり、フォーマットは以下の通りです.
列1列2列3列4列5 a 00003131 0 adductive#1 adducting#1 adducent#1 a 00003356 0 nascent#1 a 00003553 0 0 emerging#2 emergent#2 a 00003700 0.25 dissilient#1
・・・・・・後ろに10万本・・・・
デマンドは、データベースにインポートするデータテーブルの構造です.
word_id自動増分
word【adductive#1 adducting#1 adducent#1】このTXTレコードを3つのSQLレコードに変換する
value=3列目-4列目;=0の場合、このレコードはデータテーブルを挿入しません.
<?php
    $file = 'words.txt';//10W    TXT   
    $lines = file_get_contents($file); 
    ini_set('memory_limit', '-1');//    Mem  ,      
    $line=explode("
",$lines); $i=0; $sql="INSERT INTO words_sentiment (word,senti_type,senti_value,word_type) VALUES "; foreach($line as $key =>$li) { $arr=explode(" ",$li); $senti_value=$arr[2]-$arr[3]; if($senti_value!=0) { if($i>=20000&&$i<25000)// , { $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),";// word ( jack's), word( ) } } $i++; } } //echo $i; $sql=substr($sql,0,-1);// //echo $sql; file_put_contents('20000-25000.txt', $sql); // ,5000 , 40 ; max_execution_time , ?>

1、大量のデータはその時に導入して、PHPのいくつかの制限に注意して、一時的に調整することができて、さもなくば間違いを報告します
Allowed memory size of 33554432 bytes exhausted (tried to allocate 16 bytes)
2,PHP操作TXTファイル
file_get_contents()
file_put_contents()
3、大量に導入する場合は、ロットごとに導入したほうがいいです.失敗する確率は小さいです.
4、大量に導入する前に、スクリプトは必ず何度もテストして間違いなく再使用しなければならない.例えば、100個のデータでテストする.
5、導入後、PHPのmem_limitがまだ足りないと、プログラムはまだ走れません.
(一時的な文ではなくphp.iniを変更してmem_limitを向上させることをお勧めします)