SQL [Datenbanken] Texte in der DB halten?

T

Tersus

Gast
Guten Morgen,

ist es sinnvoll, längere Texte, gerne auch mal 1000 Wörter und mehr, in einer Datenbank zu halten? Oder doch lieber auf einen Fileserver, auf den in der Datenbank verlinkt wird?

Das Problem bei langen Texten ist ja die variable Größe, was dann einem Blob nahe kommt.
 
Ich würde Texte in der DB halten - I/O ist meist teurer von konventiellen Platten als das als Text in die DB zu legen. Es kommt natürlich an welchen Inhalt die Texte haben (Plain, Richtext, etc).
 
Texte sind kein Problem und Dank Volltextsuche auch sehr gut durchsuchbar. Von Binärdateien in der DB würde ich aber abraten auch wenn das ebenfalls möglich ist (hier gibt es aber auch diverse Pro und Contra Argumente).

Bezüglich Volltextsuche empfehle ich mal folgende Artikel (siehe unten). Es geht jeweils um PostgreSQL als Datenbank. PostgreSQL kann ich auch nur jedem dringend ans Herz legen wenn es um Datenbanken geht, da es kaum Wünsche offen lässt (abgesehen von der Volltextsuche, NoSQL Features und JSON/JSONB (kein Tippfehler), Reguläre Ausdrücke, falls benötigt Replizierung,...).

Hier eine kurze Übersicht zur PostgreSQL Volltextsuche
http://rachbelaid.com/postgres-full-text-search-is-good-enough/

Hier eine umfassende Einführung in die möglichkeiten der PostgreSQL Volltextsuche
http://shisaa.jp/postset/postgresql-full-text-search-part-1.html
http://shisaa.jp/postset/postgresql-full-text-search-part-2.html
http://shisaa.jp/postset/postgresql-full-text-search-part-3.html

PostgreSQL Dokumentation zur Volltextsuche:
http://www.postgresql.org/docs/9.5/interactive/textsearch.html

In der Regel macht es Sinn den Index-Typen "GIST" statt "GIN" zu verwenden. Der DB-interne Aufwand zur Erstellung/Aktualisierung des GIST Index ist höher, aber die Abfragen sind dann nochmals deutlich schneller.

Außerdem gibt es eine wunderbare Funktion 'ts_stat' bei PostgreSQL mit der man sich ausgeben lassen kann welche Begriffe wie häufig insgesamt und in wie vielen unterschiedlichen Zeilen auftreten(http://www.postgresql.org/docs/9.5/interactive/textsearch-features.html#TEXTSEARCH-STATISTICS). Das geht alles schön einfach direkt als SQL-Statement.
Das macht insbesondere bei der Spracheinstellung 'simple' Sinn bei dem jedes Wort unverändert indiziert wird.
 
Tersus schrieb:
Guten Morgen,

ist es sinnvoll, längere Texte, gerne auch mal 1000 Wörter und mehr, in einer Datenbank zu halten? Oder doch lieber auf einen Fileserver, auf den in der Datenbank verlinkt wird?

Das Problem bei langen Texten ist ja die variable Größe, was dann einem Blob nahe kommt.

Bilder/MP3s usw möglichst auslagern, Texte würde ich in der Db lassen, allein wegen Volltextsuche. Das kostet so gut wie nichts und alle DBMS haben dafür einen entsprechenden Datentypen. Nur um das mal klar zu machen: 1000 Wörter a 8 Buchstaben * 1 Byte je Buchstabe sind 8000 Byte oder grob 8kb, das wäre als Grafik so in etwa Thumbnailgröße, und mit 1000 Wörtern kann man schon recht viel sagen.

BTW dieses auslagern von Grafiken ist auch nicht unbedingt der Weisheit letzter Schluss, das würde ich auch von den Bedingungen abhängig machen. Hier bei CB fände ich es zB nicht schlimm, den Avatar zum Profil mit in die Datenbank zu packen, Das Wachstum der Tabelle mit Profilen ist vorraussagbar und so eine Avatargrafik hat begrenzte Größe. Wenn man dann die DB wegsichert hat sie klar vllt 10kb je Account mehr, aber dafür hat man die Avatare mit in den regulären Backups.
 
Zuletzt bearbeitet von einem Moderator:
Zurück
Oben