Philipp Hasenfratz: Große Texte in mysql?

Beitrag lesen

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/>.