Yaklaşık 4 milyon kayıt MySQL girildiğinde tarayıcı çöküyor

6 Cevap php

I downloaded a database that was exported to the TXT format and has about 700MB with 7 million records (1 per line). I made a script to import the data to a mysql database, but when about 4 million records inserted into, the browser crashes. I have tested in Firefox and IE. Can someone give me an opinion and some advice about this?

The script is this:

<?php
set_time_limit(0);
ini_set('memory_limit','128M');

$conexao = mysql_connect("localhost","root","") or die (mysql_error());
$base = mysql_select_db("lista102",$conexao) or die (mysql_error());
$ponteiro = fopen("TELEFONES_1.txt","r");
$conta = 0;
function myflush(){ ob_flush(); flush(); }

while(!feof($ponteiro)){
    $conta++;

    $linha = fgets($ponteiro,4096);
    $linha = str_replace("\"", "", $linha);
    $arr = explode(";",$linha);
    $sql = "insert into usuarios (CPF_CNPJ,NOME,LOG,END,NUM,COMPL,BAIR,MUN,CEP,DDD,TELEF) values ('".$arr[0]."','".$arr[1]."','".$arr[2]."','".$arr[3]."','".$arr[4]."','".$arr[5]."','".$arr[6]."','".$arr[7]."','".$arr[8]."','".$arr[9]."','".trim($arr[10])."')";
    $rs = mysql_query($sql);
    if(!$rs){ echo $conta ." error";}

    if(($conta%5000)==4999) { sleep(10); echo "<br>Pause: ".$conta; }
    myflush();
}

echo "<BR>Eof, import complete";
fclose($ponteiro);
mysql_close($conexao);
?>

6 Cevap

100 MB parçalar dosya bölme deneyin. Bu işi halletmek için hızlı çözme öneridir. Tarayıcı sorunu çözmek için karmaşık alabilirsiniz. Ayrıca farklı tarayıcıları deneyin.

PhpMyAdmin bir kaza olduysa sorgusu devam seçenekleri vardır. Durumda komut ithalat kesme izin verir o zaman sınıra yakın olduğunu saptadı. Bu ancak bu işlemleri bozabilir, büyük dosyaları aktarmak için iyi bir yol olabilir.

Eğer mysql kayıt eklemek için bir web tarayıcısı neden ihtiyaç emin değilim. Neden sadece veritabanının kendisi ithalat imkanları kullanmak ve bunun dışında web bırakmaz?

Bu mümkün değilse, bir defada 1000 gruba ekler parçalama yardım edersen, ben merak ediyorum. Aksine tek bir işlem olarak tüm veritabanını işlemekten daha, ben o kadar kesiliyor tavsiye ederim.

Eğer InnoDB kullanıyor musunuz?

  1. Ne ilk fark ettik sen unsafely floş () kullanıyor olmasıdır. Httpd tampon bir hata tam sonucudur ve komut öldüğünde () floş yapıyor. Tüm bu myflush () geçici çözüm vazgeçmek ve yerine tek bir ob_implicit_flush () kullanın.

  2. Bunu sonuna kadar çalışması için tarayıcı ile görmem gerekmez, tarayıcınızın ölür bile böylece kod işini tamamlar bir ignore_user_abort () yerleştirebilirsiniz.

  3. Emin neden tarayıcınız ölüyor değil. Belki komut çok fazla içerik oluşturuyor.

Hayır ile deneyin


Pause: nnnn

Eğer yardımcı olur tarayıcıya çıktı ve bakın. Bu tarayıcısı işlemek için istedi uzun web sayfasında boğulma olduğunu basitçe olabilir.

Ayrıca, PHP zamanlama uzun aktarım sırasında çıktı?

Onu alır zaman ekleyerek size uyku (10) sahip olduğunu, ayrıca, yardımcı olmuyor.

Farklı TXT dosyaları dosyasını ayırmayı deneyin ve dosyaları kullanarak işlemi tekrarlayabilirsiniz. Ben en az bir kez bu yaklaşımı kurardım.

Isteği tamamlamak için çok uzun sürüyor çünkü tarayıcı boğulma. Bu süreç, bir web sayfasının bir parçası olmalıdır bir nedeni var mı? Kesinlikle bu şekilde yapmak zorunda kalırsanız, yönetilebilir parçalar verilerinizi bölme düşünün.