mySQL in Textdateien

Feldhofe

Erfahrenes Mitglied
Hallo!

Mein Chat ist inzwischen praktisch fertig, es gibt nur ein Problem: Er läuft unglaublich langsam.
Nun habe ich da den Verdacht, daß es an der mySQL-Geschichte liegt...alle Seiten, in denen mySQL verwendet wird, laden so lange, während die "normalen" Seiten ohne mySQL wesentlich schneller sind.

Nun die Frage: Wär es möglich, das für mySQL geschriebene Script (eine Seite ist das, 200 Zeilen) für Schreiben in Textdateien umzuschreiben und könnte mir dabei jemand helfen?
Mit Textdateien habe ich leider absolut keine ahnung!

Gruß
Feldhofe!
 
Könntest ja mal die stellen (oder den ganzen code ...) posten, wo dein script auf die SQL db zugreift - dann kann man dir auch helfen ;)

Grüße, Morph
 
Original geschrieben von ..:: Morph
Könntest ja mal die stellen (oder den ganzen code ...) posten, wo dein script auf die SQL db zugreift - dann kann man dir auch helfen ;)
Grüße, Morph

Find ich echt super!

Ich poste einfach mal den ganzen Code, ist weitgehend vollständig so, nur der Einlogbereich ist in einer anderen Datei!
Ich hoffe, mit den Kommentaren ist es einigermaßen verständlich so!

Als Tabellen habe ich:
chat_user: Username, Passwort, Registrierdatum
chat_userliste: aktuelle User online
chat_room_haupt: der Standard-Raum, alle Posts darin
chat_msgs: Privatnachrichten /msg
PHP:
<?

echo "<link rel=stylesheet type='text/css' href='formate.css'>";

     include("db_open_close.php");
     db_open ();
$room='chat_room_haupt';



// Einlogbereich, nur beim Einloggen relevant!!
$result = mysql_query("SELECT count(*) AS anzahl FROM chat_user where user='$a_user' AND passwort='$a_passwort'");

$num = mysql_result($result,0,"anzahl");

  if ($num=='0' && $user=='')
  //falscher Login
  {
  print"Falscher Login.";
  }

  if ($num=='1' OR $user!='')
  {
  if ($user=='')
  {
   $maxzahl = mysql_query("SELECT max(id)FROM $room");

       while($row = mysql_fetch_array($maxzahl))
       {
       $zahl = $row["max(id)"];
       $untere=$zahl-1;

       }
       $id =$zahl+1;

       $zeit=strftime ("%Y-%m-%d %H: %M: %S");
$uhr = date('H:i:s');

// der Eintritts-Spruch
  mysql_query("INSERT INTO $room VALUES ('$id','','<i>$a_user kommt um $uhr Uhr in den Kuhstall heringestolpert!</b>','$farbe','$zeit')");

// hier für die Userliste!
  mysql_query("INSERT INTO chat_userliste VALUES ('$a_user','$zeit','0')");
  $user=$a_user;
  }




// der eigentliche Chat-Teil!!
// die größte ID der DB wird ausgegeben, um 1 erhöht.
 $maxzahl = mysql_query("SELECT max(id)FROM $room");

       while($row = mysql_fetch_array($maxzahl))
       {
       $zahl = $row["max(id)"];
       $untere=$zahl-1;

       }
       $id =$zahl+1;

$zeit=strftime ("%Y-%m-%d %H: %M: %S");


// es folgt nun die Bearbeitung der Chattexte!!

function denken($message)
{
     mysql_query("INSERT INTO $room VALUES ('$id','','<i>$user $message</i>','$farbe','$zeit')");
     $text='';
     $args='';
}


$args = explode(" ", $text);

   switch($args[0]) {

     // DENKEN
     case "/d":
     case "/me":
     $args[0] = "";
     $message = implode(" ",$args);
     mysql_query("INSERT INTO $room VALUES ('$id','','<i>$user $message</i>','$farbe','$zeit')");
     $text='';
     $args='';
     break;


     case "/msg":
     $touser = $args[1];
     $args[0] = $args[1] = "";
     $message = implode(" ", $args);
     mysql_query("INSERT INTO chat_msgs VALUES ('','$user','$touser', '$message','$zeit','0')");
     $msg='1';
     $text='';
     $args='';
     break;

     case "/quit":
     case "/q":
     $args[0] = "";
     $message = implode(" ",$args);
     $uhr = date('H:i:s');
     $quit='1';
     include('ende.php');
     mysql_query("INSERT INTO $room VALUES ('$id','','<i>$user hat um $uhr den Raum verlassen! $message</i>','$farbe','$zeit')");
     mysql_query("DELETE FROM chat_userliste where username='$user'");
     $text='';
     $args='';
     break;



     //default:
     //  chat_message(translate("No such Command found").": ".$args[0], $userdata[nick], "");

   }


####
// Entrag der eingegebenen Werte


// falls der Eintrag nicht leer ist (normales Refresh!), wird hier verschiedenes eingetragen
if ($text!=' ' && $text!= '')
{
mysql_query("INSERT INTO $room VALUES ('$id','$user','$text','$farbe','$zeit')");
}

// falls man sich nicht gerade ausgeloggt hat
if ($quit!='1')
{
print"Dein Username ist $user<br><hr>";
$result = mysql_query("SELECT id, user, text FROM $room order by id ASC limit $untere,$zahl");

   function print_result_table1($result)
   {

     while ($row = mysql_fetch_row($result))
           {


     print "<body>
<font face=verdana size=-1>($row[0].) $row[1]:</font>
<font face=verdana size=-1 class=gelb>$row[2]</font><br>

                    " ;
         }


  }
print_result_table1($result);

########

// Privatnachrichten selber schicken, ANZEIGE der Nachricht!
if ($msg=='1')
{
print"<hr>Private Nachricht an $touser: $message";
}

// ENDE Privatnachrichten schicken-Anzeige

#######

// Privatnachrichten empfangen
$result2 = mysql_query("SELECT vonuser, sendezeit, nachricht, gelesen FROM chat_msgs where anuser='$user'AND gelesen='0' order by sendezeit ASC");
mysql_query("UPDATE chat_msgs set gelesen='1' WHERE anuser='$user'");

 function print_result_table2($result2)
   {

     while ($row2 = mysql_fetch_row($result2))
           {

     print "<hr>
<font face=verdana size=-1>Private Nachricht von $row2[0]: $row2[2]<br>
                    " ;
         }


  }
print_result_table2($result2);
// ENDE Privatnachrichten empfangen

##########

// hier wird versteckt jedes Mal der Username übermittelt.
print"<hr>
<form method='post' action='main.php?$user&$text'>
<INPUT type='hidden' name='user' value='$user' SIZE='30' MAXLENGTH='300'>
<INPUT type='text' name='text' SIZE='30' MAXLENGTH='300'>
<input type=submit value='Hochladen!'>
</form>";
}// Ende if QUIT!=1
}//Ende der Gesamtklammer, falls der Login richtig ist!
?>
 
Zuletzt bearbeitet:
Hab den Code mal kurz überflogen.

Mir fällt so auf die schnelle nichts auf was irgendwie gross optimiert werden könnte.

Dauert es online oder offline so lange? Kann nämlich sein, dass der MySQL daemon von mehreren mitbenutzt wird, jeder hat seine eigene Datenbank dadrin. Naja und wenn halt viele zugriffe auf einmal erfolgen (von allen usern gleichzeitig) bremst das natürlich unheimlich und du wärst mit den text files wahrscheinlich besser bedient.

So Long
Thevirus
 
Original geschrieben von TheVirus
Hab den Code mal kurz überflogen.

Mir fällt so auf die schnelle nichts auf was irgendwie gross optimiert werden könnte.

Dauert es online oder offline so lange? Kann nämlich sein, dass der MySQL daemon von mehreren mitbenutzt wird, jeder hat seine eigene Datenbank dadrin. Naja und wenn halt viele zugriffe auf einmal erfolgen (von allen usern gleichzeitig) bremst das natürlich unheimlich und du wärst mit den text files wahrscheinlich besser bedient.

So Long
Thevirus

Genau das ist ja das Problem.
Die Datenbank liegt auf einem anderen Server als der Rest, und da greifen wohl alle HOSTEUROPE-User daruf zu.
Deshalb wollt ich es ja in Textdateein umändern, ich brauche nur jemanden der mir dabei hilft!
Ich kann mit Textdateein nicht umgehen.
 
Hab mir das schonmal angeguckt, versteh's einfach nicht so recht...
Vielleicht kann mir ja einfach mal jemand ein Beispiel aus dem Code "übersetzen", ich weiß echt nicht wie ich das machen soll!

Feldhofe

P.S. Mit Textfiles geht es auf jeden Fall schneller, ein anderer Chat den ich kenne und der mit TF arbeitet, liegt auch bei Hosteurope...der läuft aber im Gegensatz zu meinem superschnell...
 
-

Ich würde dir davon abraten, mit Txt Files den Chat aufzubauen. Es kann immer nur ein User auf die Textdatei zugreifen. Wenn 2 User gleichzeitig auf die gleiche Datei zugreifen, wird sie schnell fehlerhaft.

Du kannst das natürlich dadurch verhindern, indem du die Datei durch flock() für deinen Schreibbefehl sperrst, so dass nur ein User drauf zugreifen kann, aber das würde die Performance verschlechtern.

Bleib lieber bei MySQL, damit bist du besser bedient.
 
Zuletzt bearbeitet:
ich könnte dir anbieten wegen performance test den chat mal bei mir zu installieren.. hab nen servern den ich praktisch allein nutze an ner 55mbit/s leitung..

wenn du interesse hast kannst du mir ja mal schreiben!
ICQ: 8867898
EMAIL: webmaster@teensweb.de

PS: Bitte keine PM`s die überseh ich hier immer
 
Ja, das würd mich schon interessieren, könnenwir gen mal machen. Sprech dich nachher auch noch mal im ICQ an!
Trotzdem würd ich mich freuen, wenn mir mal jemand mit den Textdateein kurz zeigen könnte!!

GrußFeldhofe
 
Zurück