Hi Leute,
ich habe ein Script geschrieben, das mir eine MySQL Abfrage in eine CSV Datei schreibt. Mein Problem ist, dass es sich hier um relativ viel Daten handelt (>400.000 Datensätze). Ein einfacher Scriptaufruf reicht hier zeitlich also nicht aus.
Also dachte ich mir: AJAX machts möglich.
Also habe ich mir ein Script gebastelt, das die Abfrage über das MySQL Limit nach und nach in die Datei schreibt. Funktioniert auch alles wunderbar, nur wird das Script nach jedem Aufruf durch Javascript immer langsamer. Ich habe auch immer daran gedacht alle Variablen wieder feizugeben unnd auch das MySQl result wieder freizugeben. Hilft alles nichts.
Habe ich irgendwas übersehen? Gibt es Ideen?
Ich lade das Script alle 1000 Datensätze nach und speichere die Datensätze stringmäßig in eine Sessionvariable. Alle 10000 Datensätze speichere die Sessionvariable in die Datei und resette dann die Variable.
Anfangs habe ich es auch direkt in die Datei geschrieben, da aber ab 100000 Datensätzen das speichern der Datei etwas länger dauert, habe ich das Script somit schon etwas beschleunigt.
Reicht aber trotzdem nicht.
Gruß Schrodi
ich habe ein Script geschrieben, das mir eine MySQL Abfrage in eine CSV Datei schreibt. Mein Problem ist, dass es sich hier um relativ viel Daten handelt (>400.000 Datensätze). Ein einfacher Scriptaufruf reicht hier zeitlich also nicht aus.
Also dachte ich mir: AJAX machts möglich.
Also habe ich mir ein Script gebastelt, das die Abfrage über das MySQL Limit nach und nach in die Datei schreibt. Funktioniert auch alles wunderbar, nur wird das Script nach jedem Aufruf durch Javascript immer langsamer. Ich habe auch immer daran gedacht alle Variablen wieder feizugeben unnd auch das MySQl result wieder freizugeben. Hilft alles nichts.
Habe ich irgendwas übersehen? Gibt es Ideen?
PHP:
$sql = $_SESSION['sql']." LIMIT ".$_SESSION['from'].", ".$_SESSION['step'];
$result= mysql_query($_SESSION['sql']);
$y=mysql_num_rows($result);
$k=mysql_num_fields($result);
for($i=0;$i<$y;$i++){
for($j=0;$j<$k;$j++){
$_SESSION['data'] .= '"'.mysql_result($result,$i,mysql_field_name($result,$j)).'";';
}
$_SESSION['data'] .= "\r\n";
}
mysql_free_result($result);
mysql_close();
unset($result);
//In Datei Speichern
$_SESSION['step_num']++;
if($_SESSION['step_num'] % 10 == 0){
$fp = fopen("../../".$_SESSION['file'],'a');
fputs($fp, $_SESSION['data']);
fclose($fp);
unset($fp);
unset($_SESSION['data']);
$_SESSION['data']='';
}
if($_SESSION['from'] == 0) $percent = 0;
else $percent = ceil($_SESSION['from'] / $_SESSION['num_rows'] * 100);
$_SESSION['from'] += $_SESSION['step'];
if($_SESSION['from'] < $_SESSION['num_rows']){
echo "Bitte warten ".$percent."%";
?>
<script type="text/javascript">content('content/auswertung/rohdaten_berechnung.php');</script>
<?php
} else {
$file = fopen("../../".$_SESSION['file'],'a');
fputs($file, $_SESSION['data']);
fclose($file);
?>
Abgeschlossen. <a target="about_blank" href="<?= $_SESSION['file']; ?>">Download</a>
<?php
unset($_SESSION);
}
?>
Ich lade das Script alle 1000 Datensätze nach und speichere die Datensätze stringmäßig in eine Sessionvariable. Alle 10000 Datensätze speichere die Sessionvariable in die Datei und resette dann die Variable.
Anfangs habe ich es auch direkt in die Datei geschrieben, da aber ab 100000 Datensätzen das speichern der Datei etwas länger dauert, habe ich das Script somit schon etwas beschleunigt.
Reicht aber trotzdem nicht.
Gruß Schrodi