Alex: Große Texte in mysql?

Hallo

ich will auf meiner Seite u.a. ein Forum mit PHP machen d.h. dass $eintrag sehr viel Text ist soll ich den Text jezt in die MySQL tabele reintun ( die Spalte müsste TEXT heisen das ist das mit dem gröstmögliochen Text oder?) oder soll ich in der Spalt eintrag nur einen Dateinamen angeben und den großen Text in eine .txt datei schreiben?
In der txt könnte man ja auch eine Suche machen oder? Ich glaube mit ereg_match oder so stimmt das ?

Also was ist besser .txt oder gleich in die Tabele?

mfg
Alex

  1. Halihallo Alex

    ich will auf meiner Seite u.a. ein Forum mit PHP machen d.h. dass $eintrag sehr viel Text ist soll ich den Text jezt in die MySQL tabele reintun ( die Spalte müsste TEXT heisen das ist das mit dem gröstmögliochen Text oder?)

    Der Datentyp TEXT ist nicht der grösst mögliche, ist aber für ein Forum wohl der
    sinnvollste.

    Für weitere siehe:
    http://www.mysql.com/doc/en/Column_types.html

    oder soll ich in der Spalt eintrag nur einen Dateinamen angeben und den großen Text in eine .txt datei schreiben?

    Das ist eine Frage, die sich nicht leicht zu beantworten lässt. Einige Gedanken dazu:

    Datenbanken entfalten ihre Stärken bei Datentypen mit fixer Länge (das ist TEXT nicht).
    Datentypen mit variabler Länge (wie VARCHAR oder TEXT zum Beispiel) sind in Datenbanken
    meistens schlecht implementiert (weil sie per se schlecht zu verwalten sind aufgrund der
    Unkenntnis ihrer Länge). Dies führt zu Performanceeinbussen und Overhead (nicht
    verwendeter Speicher in den Datentabellen).
    Die Speicherung der Texte im Dateisystem über Textdateien hat jedoch ebenfalls Nachteile,
    zumal die Daten nicht an einem einheitlichen Ort gespeichert sind, ein Suchalgorithmus
    selber implementiert werden muss, die Daten über PHP oder anderer verwendeter
    Programmiersprache speicher- und performancetechnisch evtl. nicht so gut durchsucht
    werden können wie dies eine Datenbank macht. Dies um einige Vor- und Nachteile zu nennen.

    In der txt könnte man ja auch eine Suche machen oder? Ich glaube mit ereg_match oder so stimmt das ?

    http://ch2.php.net/manual/de/function.preg-match.php

    Also was ist besser .txt oder gleich in die Tabele?

    Das ist pauschal leider nicht zu beantworten. Vor- und Nachteile stehen oben, zur
    Entscheidung noch folgende Gedanken:

    MySQL bietet einen sogenannten Fulltext-Search
    (http://www.mysql.com/doc/en/Fulltext_Search.html). Über diesen lassen sich
    Anfragen performant durchführen.

    Sobald du Daten fixer Länge mit Daten variabler Länge in einer Tabelle vermischst,
    sinkt die Performance. Greifst du auf die Tabelle mit den anderen Daten eines Postings
    oft zu (z.B. für eine Übersicht, wo nur Subject, Name und Datum stehen), solltest du
    ggf. eine extra Tabelle nur für den Text variabler Länge anlegen, so dass du nur
    Performanceeinbussen hast, sobald du auf die Texte zugreifst.

    Ändern sich die Inhalte der Texte oft, oder werden viele Datensätze gelöscht und andere
    hinzugefügt, steigt der Overhead (wie oben, nicht verwendeter Speicher => toter Speicher)
    sehr stark an. Entweder man gliedert alles in das Dateisystem aus und hat so stets
    einen minimalen Overhead, oder man sollte mit gewisser Frequenz mal

    OPTIMIZE TABLE tbl_name       (http://www.mysql.com/doc/en/OPTIMIZE_TABLE.html)

    aufrufen, um die Tabelle zu "komprimieren", also nicht verwendeten Speicher wieder frei-
    zugeben.

    Besonders bei einer Suchfunktion wäre ich vorsichtig. Geht diese über den ganzen
    Datenbestand (alle Postings)? - Hier wäre es besonders für solche mit weniger Erfahrung
    ratsam, dies der Datenbank zu überlassen, denn die Programmierer einer Datenbank werden
    sich mehr überlegt haben und kennen die Vor- und Nachteile bzw. bestmöglichen
    Umsetzungen.

    Viele Grüsse

    Philipp

    --
    RTFM! - Foren steigern das Aufkommen von Redundanz im Internet, danke für das lesen der Manuals.
    Selbstbedienung! - Das SelfForum ist ein Gratis-Restaurant mit Selbstbedienung, Menüangebot steht in den </faq/> und dem </archiv/>.
    1. Servus,

      schon wieder schneller und besser....
      Ich wollte nur anmerken, dass es unter unix durchaus Befehle gibt, die texte in Dateien super schnell finden. Schneller als in einer DB.
      Ist jedoch ein seperates Package das man einbinden muss.

      Müsste mal recherchieren, wie der nochmals lautete.

      Gruss Matze

      1. Halihallo Matze

        schon wieder schneller und besser....

        Hehe :-)
        Komisch, jetzt sinds schon vier Postings, die alle ziemlich genau eine Stunde nach
        Eingangsposting innerhalb von 5 Minuten antworteten :-)

        Ich wollte nur anmerken, dass es unter unix durchaus Befehle gibt, die texte in Dateien super schnell finden. Schneller als in einer DB.

        Das stimmt, hatte ich vergessen zu erwähnen.

        Ist jedoch ein seperates Package das man einbinden muss.

        Mit popen http://ch.php.net/manual/de/function.popen.php gibt's da auch eine
        schöne Möglichkeit.

        Müsste mal recherchieren, wie der nochmals lautete.

        man grep

        z.B.

        Viele Grüsse

        Philipp

        --
        RTFM! - Foren steigern das Aufkommen von Redundanz im Internet, danke für das lesen der Manuals.
        Selbstbedienung! - Das SelfForum ist ein Gratis-Restaurant mit Selbstbedienung, Menüangebot steht in den </faq/> und dem </archiv/>.
        1. Servus,

          jawoll wenn Du grep sagst dann wird es das sein es lag mir auf der Zunge wusste jedoch nicht ob es das wirklich ist.

          Danke
          Gruss Matze

          1. Halihallo Matze

            jawoll wenn Du grep sagst dann wird es das sein es lag mir auf der Zunge wusste jedoch nicht ob es das wirklich ist.

            Mal sehen: http://unixhelp.ed.ac.uk/CGI/man-cgi?grep (ist wohl etwa das, was dir
            auf der Zunge lag, oder?). Ürigens: Ein wirklich guter Tipp mit den
            Kommandozeilenutilities, die sind meistens wirklich sehr viel performanter, zumal die
            Datenbank eigentlich nicht für derartiges optimiert ist/(sein muss). Aber irgendwie habe
            ich auch einige Bedenken, 1000e von Textdateien über die Hilfe von grep (oder was auch
            immer) zu durchsuchen, da muss man sich schon _einige_ Gedanken dazu machen. Auch hier
            kann man es entweder gut oder schlecht umsetzen...

            Viele Grüsse

            Philipp

            --
            RTFM! - Foren steigern das Aufkommen von Redundanz im Internet, danke für das lesen der Manuals.
            Selbstbedienung! - Das SelfForum ist ein Gratis-Restaurant mit Selbstbedienung, Menüangebot steht in den </faq/> und dem </archiv/>.
            1. Servus Philipp,

              nein obiges lag mir jetzt weniger auf der Zunge als z.B. Unix Power Tools oder Solaris 8 Systemadministration / Optimierung von Unix Systemen etc.

              Ich selbst bin ziemlich Datenbank begeistert, was wiederum bedeutet, dass Ich am liebsten auch meine Einkaufliste in einer Datenbank ablege.

              Jedoch mit meinem Unix Admin komme Ich regelmäsig in endlose diskussionen, weil er meint das das alles sch... sei und man mit grep und co viel besser Texe durchsuchen kann.

              Mir geht es aber so wie dir, zig Textdateien auf einem Laufwerk abzulegen und mit grep zu durchleuchten kann es eben nicht gewesen sein.

              Gruss Matze

  2. Servus,

    prinzipiell würde ich sagen, dass es wohl besser ist den Text in die Datenbank zu packen. Da gehen jedoch die Meinungen auseinander, unter Unix gibt es einige Kommandozeilen Suchmethoden, die deutlich schneller sein sollen als über Datenbank.
    Wie schnell hierbei PHP ist weiss Ich nicht.

    Die grösse eines Feldes solltest Du eigentlich bestimmen können.
    Wie das nun MYSQL handhabt weiss ich nicht aber die Doku hierzu sollte Dir auf jeden Fall sagen können wie gros eine TEXT  Spalte ist.

    Nebenbei: Schränke die maximale Eingabe länge von Feldern immer ein. sonst kommt irgendwann mal einer auf die Idee Dir zig GB an Text zu senden.

    Gruss Matze

    1. Hallo

      Nebenbei: Schränke die maximale Eingabe länge von Feldern immer ein. sonst kommt irgendwann mal einer auf die Idee Dir zig GB an Text zu senden.

      »»
      Danke für deine Antwort. Wie schränke ich denn die Länge ein? Ich habe es bei einem Gästebuch so gemacht das zwingend ein zeilenbruch gemacht wird (damit es gut auf die seite passt) und dann habe ich die \n und <br> 's gezählt und nur ne bestimmte Zahl zugelassen? Ist sowas gut oder was mpfihlst du?

      Gruss Matze

      mfg

      Alex

      1. Servus,

        So kann man das auch machen. Ich hätte einfach nur die länge des String erfragt mit de Du das holst.

        Der Befehle müsste so ähnlich lauten String.length();

        Dieser liefert Dir die länge des String als Zalh zurück die Du dann prüfen kannst.

        Gruss Matze

  3. Hallo

    Hi!

    ich will auf meiner Seite u.a. ein Forum mit PHP machen d.h. dass $eintrag sehr viel Text ist soll ich den Text jezt in die MySQL tabele reintun ( die Spalte müsste TEXT heisen das ist das mit dem gröstmögliochen Text oder?) oder soll ich in der Spalt eintrag nur einen Dateinamen angeben und den großen Text in eine .txt datei schreiben?

    Mach das am besten direkt in die Tabelle rein.
    Geht im Endeffekt schneller.

    In der txt könnte man ja auch eine Suche machen oder? Ich glaube mit ereg_match oder so stimmt das ?

    Also ich kenn die Funktion nicht und die PHP Refernz auf php.net anscheinend auch nicht

    Also was ist besser .txt oder gleich in die Tabele?

    Wie gesagt ebsser Tabelle.

    mfg
    Alex

    Grüße
    Julius

  4. Hallo Alex,

    ich will auf meiner Seite u.a. ein Forum mit PHP machen d.h. dass $eintrag sehr viel Text ist soll ich den Text jezt in die MySQL tabele reintun

    definiere "sehr viel Text".

    ( die Spalte müsste TEXT heisen das ist das mit dem gröstmögliochen Text oder?)

    der größtmögliche Text ist laut http://www.mysql.de/doc/de/Column_types.html#IDX1033 LONGTEXT mit 4294967295 (2^32-1) Zeichen.

    oder soll ich in der Spalt eintrag nur einen Dateinamen angeben und den großen Text in eine .txt datei schreiben?

    eher nicht, da du ja sonst Datenbank und Datei abfragen musst.

    In der txt könnte man ja auch eine Suche machen oder?

    ja, allerdings musst du dafür jede Datei öffnen, auslesen, durchsuchen und schließen - je nach Anzahl der Dateien dürfte das etwas dauern.

    Also was ist besser .txt oder gleich in die Tabele?

    ich würde eine Datenbank nehmen, da MySQL auch sehr große Tabellen verwalten kann (siehe http://www.mysql.de/doc/de/Table_size.html) - aber es kommt imho auch darauf an, was du mit den Daten machen willst.

    Grüße aus Nürnberg
    Tobias

    --
    Selfcode: sh:( fo:) ch:? rl:( br:< n4:& ie:% mo:| va:) de:] zu:) fl:( ss:| ls:[ js:|