Announcement

Collapse
No announcement yet.

MYSQL Datenbank erzeugen und verarbeiten, aber wie?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • MYSQL Datenbank erzeugen und verarbeiten, aber wie?

    Hallo,

    also schonmal im Vorraus, ich habe noch nie etwas mit MySQL gemacht und bin auch in PHP noch Anfänger.

    Ich bin dabei mir PHP und die Kommunikation mit einer MySQL DB anzueignen und habe dazu jetzt eine grundsätzliche Frage:.

    Wie sind nach und nach die Schritte von Ereugung einer MySQL DB heraus über Zugriff auf selbige.

    Bitte keine Vorschläge für 500 Seiten dicke Bücher usw. möchte nur eine Art kurzes Tutorial in 10 Zeilen mit den grundlegenden Dingen in Sachen Code.

    Danke schonmal

    Martin Weber

    (Edit: Hab grad das hier gefunden: http://www.schattenbaum.net/php/ und das scheint doch schon sehr gut zu sein)

  • #2
    Hallo Martin,

    Eine MySQL DB erzeugst du am einfachst über phpMyAdmin.
    Entweder Interaktiv oder per SQL-Script.
    Auf die DB zugreifen kannst du anschließend mit den in PHP integrierten <a href="http://www.php.net/manual/de/ref.mysql.php">MySQL-Funktionen</a>
    Stichwort: mysql_select_db(), mysql_connect(), mysql_query(), mysql_fetch_row(). (In dieser Reihenfolge

    Gruß Falk

    P.S.: Ich hab nicht genau gezähtl, sind aber etwa 10 Zeilen ;
    Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

    Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

    Comment


    • #3
      Ist MySQL eigentlich geeignet für eine Anwendung mit der 10.000 Benutzer gleichzeitig darauf zugreifen

      Comment


      • #4
        In der Standardkonfiguration ist MySQL so eingerichtet, daß die Anzahl gleichzeitiger Verbindungen auf 250 begrenzt wird. Diesen Wert kann man erhöhen, dies hat allerdings seine Grenzen. Nochmal zurück auf den anderen Thread, 10.000 echte gleichzeitige Verbindungen wird fast jeden normalen Webserver in die Knie zwingen (wenn Du also einen Shared Host oder Dedizierten Standardserver bei irgend einem Provider buchst).
        Die Frage bleibt allerdings, was Du unter "gleichzeitig" verstehst. Wirklich simultane Requests wirst Du mit einem normalen Server nicht bedienen können (hier könnte nur noch ein Cluster helfen), wenn Du jedoch meinst, daß es vorkommen kann, daß einmal ein paar Tausend Besucher die Seite gleichzeitig besuchen, dann kann man eventuel mit guter Programmierung dafür sorgen, daß es einigermaßen noch läuft (Caching, keine persistenten Verbindungen, Timeouts runter setzen, Speichernutzung des Servers optimieren, Bandbreitenverbrauch drosseln)

        Comment


        • #5
          Wie läuft das eigentlich genau? Wenn sich jemand z.B. im Forum anmeldet.. besteht dann die ganze Zeit eine Verbindung? Oder wird diese nur bei einem Request hergestellt und nach Beendigung der Arbeit wieder geschlossen?

          Also so:

          Verbindung aufbauen

          Seite1 aufrufen
          Seite2 aufrufen
          .
          .
          Seite n aufrufen

          Verbindung beenden

          oder so:

          Verbindung aufbauen
          Seite1 aufrufen
          Verbindung beenden

          Verbindung aufbauen
          Seite2 aufrufen
          Verbindung beenden

          Comment


          • #6
            Wie das genau läuft hängt von der verwendeten Datenbank und der verwendeten Funktion zum Aufbau der Verbindung ab. Nehmen wir mal MySQL und PHP als Beispielfall. Hier hast Du die Option persistente Verbidnungen oder nicht-persistente Verbindungen zu nutzen. Nicht-persistente verbindungen etablierst Du mit mysql_connect, persistente mit mysql_pconnect.
            Nicht-persistente Verbindungen werden aufgebaut und dann entweder durch mysql_close geschlossen innerhalb des Scriptes, oder automatisch nachdem das Script beendet wird 8also nach Beendigung des Threads / Prozesses, der diese verbindung nutzte. Vereinfacht gesagt: Spätestens nach Auslieferung der Seite schließt sich eine nicht-persistente Verbindung.
            Persistente Verbindungen arbeiten anderst. Diese bleiben in einem Pool bestehen, auch nachdem sie nichtmehr genutzt werden. Startet ein neuer Prozess des Webservers, der eine DB-Verbindung braucht, so wird zuerst im Pool nachgeschaut, ob eine nicht genutzte Vebrindung vorhanden ist und diese genutzt, bevor eine neue aufgebaut wird.
            Beides hat Vor- und Nachteile. Die persistenten Verbindungen ersparen die Kosten eines Verbindungsaufbaues wenn sie wiederverwendet werden kann, diese Kosten sind allerdings bei MySQL recht gering (im Gegensatz zu z.B. Oracle). Der Nachteil ist, daß es durch persistente Verbindungen jedoch dazu kommen kann, daß man recht schnell die maximal erlaubten gleichzeitigen Verbindungen zur Datenbank erreicht (wie erwähnt bei MySQL standardmäßig 250). Ich durfte letztens ein Fremdscript überarbeiten, bei dem der damalige Programmierer pro Script ca. 5 gleichzeitige persistente Verbindungen etablierte. Somit war dann spätestens bei 50 Requests Schluß und es kam zu einer Fehlermeldung. Im Normalfall kam dieses Problem jedoch früher zum Tragen, da zwischen Freigabe einer persitenten verbindung und neuer Nutzung eine gewisse Zeitspanne liegt in der die Verbindung eigentlich nicht genutzt ist, abernoch nicht iweder verwendet werden kann. Es wird also trotz ungenutzter Verbindung eine neue etabliert.
            Nicht-persistente Verbindungen haben nun eben den Nachteil, daß für jede Verbindung ein neuer Verbindungsaufbau abläuft, die schon erwähnt ist dies bei MySQL jedoch nciht ganz so tragisch. Dafür werden die Verbindungen spätestens nach Beendigung des Scriptes wieder frei gegeben. Auch hier stößt man bei vielen Requests an die maximale Verbindungsanzahl wenn man nicht innerhalb des Scriptes die Verbindungen wieder direkt frei gibt mit mysql_close (und selbst dann stößt man irgendwann an die maximale Zahl).
            Fazit ist, wenn Du wirklich mit vielen gleichzeitigen Zugriffen rechnest mußt Du sehr überlegt programmieren (z.B. eine Datenbankklasse für ALLE Datenbankzugriffe nutzen, die als Singleton aufgebaut ist, damit pro Script wirklich nur eine DB-Verbindung genutzt wird, direktes Freigeben der verbindung, wenn diese nciht mehr genutzt wird, auf persistente Verbindungen verzichten,...) und einen entsprechenden Server mit genügend Resourcen nutzen und ihn entsprechend auf hohe Last konfigurieren

            Comment


            • #7
              Also die PHP-Skripte werten nur kurz Daten aus,

              d.h. Ich sende z.B. den Benutzernamen an das Skript GetStandort.php und dieses liefert mir dann in ein paar Zeilen ohne großartige Darstellung ein paar Daten mit:

              1.Zeile: Standortname
              2.Zeile: Umgebungsbedingung
              usw.

              dann wertet mein Delphiprogramm diese Zeilen aus und sorgt für die Anzeige. Das dürfte an sich nicht sehr lange dauern und deswegen sollte das doch eigentlich machbar sein. Es ist deswegen auch unwahrscheinlich das alle gleichzeitig auf die DB zugreifen.

              Wie lange würde so eine "Datenanforderung" ungefähr dauern, also Daten aus einer Tabelle mit sagen wir mal 10 Feldern?

              Das Skript wäre ja sehr simpel gestrickt.

              Und würde ich so über dieses Limit kommen

              Comment


              • #8
                Alles was ich jetzt dazu sagen könnte wäre pure Mutmaßung, da es von so vielen verschiedenen Faktoren zusammen hängt, z.B. ob die Datenbank auf dem selben Server läuft wie der Webserver oder diese über das Netzwerk kommunizieren, wie viel Last der Webserver und der Datenbankserver haben, wieviel Datenbanken darauf laufen, wie generell seine Leistungsfähigkeit ist, wie die Datenbanktabellen aufgebaut sind, wie groß letztendlich der geholte Datensatz ist, ob der gesuchte Teil im Arbeitsspeicher oder auf der Platte gelagert ist, ob die Daten gecacht sind usw...
                Ich kann dir nur einen groben Anhaltspunkt geben:
                Auf meinem Entwicklungsrechner mit 2 2.8GHz Xeon-Prozessoren, 2GB Arbeitsspeicher, 2 73GB U160 SCSI-Festplatten im Raid1 Verbund und einer MySQL5 Datenbank mit knapp 100.000 Datensätzen und einer Größe von 80MB dauert ein simpler Select über einen kompletten Datensatz anhand des Primärschlüssels im Schnitt 6ms (das ist nur die Zeit, die die DB braucht um den Datensatz zurück zu liefern)

                Comment

                Working...
                X