PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Maximale Größe eines mediumblob-Feldes


knight1
06.06.2009, 09:59:49
Hallo SelfPHP-COM,
ich habe in einer Tabelle ein mediumblob-Feld. Dort speichere ich Logo-Grafiken ab.
Ich weiß, ist nicht die "eleganteste" Lösung.
Gibt es vielleicht eine Möglichkeit in MySQL die maximale Größe des Feldes pro Datensatz zu beschränken, oder muss ich das in meinem Script regeln? In der php.ini ist der maximal Datei-Upload schon auf 2MB beschränkt.


Danke shcon im vorraus für Eure Antworten.




Kai aka Knight1

cortex
06.06.2009, 10:43:12
Ich weiß, ist nicht die "eleganteste" Lösung.

nicht mal das - es ist schlichtweg unsinn.

Gibt es vielleicht eine Möglichkeit in MySQL die maximale Größe des Feldes pro Datensatz zu beschränken

nur über den typ der spalte - mehr infos dazu im handbuch (http://dev.mysql.com/doc/refman/5.1/de/index.html). die logik sollte besser im php-skript selbst enthalten sein - der upload muss ja sowieso irgendwie verarbeitet werden.

cx

knight1
06.06.2009, 11:05:41
Im Handbuch habe ich nichts gefunden. Nur den Speicherbedarf.


Kai aka Knight1

cortex
06.06.2009, 11:16:35
Nur den Speicherbedarf

durch die wahl eines bestimmten spaltentyps erzwinge ich demzufolge eine obere grenze für die speicherung von daten. ich sagte ja: nur - löse das problem besser über ein entsprechendes skript.

cx

DokuLeseHemmung
06.06.2009, 11:32:11
Ich halte die Idee nicht für soooo schlecht.

Warum soll man gleich noch keine Binärdaten in DBs speichern?
Wurde dazu nicht extra der Datentype BLOB erfunden?
Sind Bilder keine Daten? Warum sind Bilder keine Daten?

Was ist logischer?
Zusammengehörige Daten über 2 völlig verschiedenen Speichermedien zu verteilen, oder zusammengehörige Daten auch zusammen zu lasen?

Selbst wenn die Performance etwas leiden mag, ist die referenzielle Integrität doch ein gewichiger Punkt. Gerade wenn es an die Datensicherung geht.

Vergleichbar:
"Dokumenten Management Systeme" die handeln das (fast) alle so ab.

Und nein, die max. Größe kannst du nur über den Spaltentype oder im PHP begrenzen.

cortex
06.06.2009, 11:50:11
Warum soll man gleich noch keine Binärdaten in DBs speichern?

1. weil die daten - in dem fall das bild - bereits als file vorliegen; sie wurden hochgeladen. den binär-stream in ein datenfeld zu prügeln,verbraucht unnötig ressourcen.

2. weil der http-server die bilder direkt / efizienter ausliefern kann.


Wurde dazu nicht extra der Datentype BLOB erfunden?


um bilder zu speichern, höchstwahrscheinlich nicht - es auch andere daten in binärform, oder?


Was ist logischer?
Zusammengehörige Daten über 2 völlig verschiedenen Speichermedien zu verteilen, oder zusammengehörige Daten auch zusammen zu lasen?


eine website besteht aus zig zusammengehörenden daten... willst du diese daten allesamt als binär-stream in einem blob speichern?


"Dokumenten Management Systeme" die handeln das (fast) alle so ab.


die methapher mit dem sch**sshaufen und den fliegen kennst du doch .-

cx

DokuLeseHemmung
06.06.2009, 12:01:35
die methapher mit dem sch**sshaufen und den fliegen kennst du doch .-
Genau!
Tausend Fliegen können nicht irren, Scheiße schmekt gut!
Und ich behaupte: Sie haben recht!
Zumindest aus ihrem Blickwinkel.
Das stärkste pro Argument: Es sichert ihr überleben.


verbraucht unnötig ressourcen
Über das Wort "unnötig" müssen wir uns noch auseinander setzen!
Unnötig ist arg subjektiv. Es ist eine Frage des Standpunktes.


Auf der einen Seite bekommst du die referenzielle Integrität geschenkt, und auf der anderen seite mußt du sie künstlich/aufwändig aufrecht erhalten.

eine website besteht aus zig zusammengehörenden daten... willst du diese daten allesamt als binär-stream in einem blob speichern?
Warum nicht?
Warum auseinander reißen, was doch zusammen gehört?

Jeder soll es doch so abhandeln, wie er/sie/es möchte.
Ich kann nur dieses dogmatische Verteufeln nicht leiden.

cortex
06.06.2009, 12:19:29
Über das Wort "unnötig" müssen wir uns noch auseinander setzen!

gern - bei gelegenheit, ja?


dieses dogmatische Verteufeln


das sollte so nicht rüberkommen. jede technik soll im richtigen moment zur anwendung kommen. diesen moment zu erkennen, ist sicher immer wieder eine herausforderung. ohne trotzig zu wirken - ich bleibe bei meinem standpunkt.

artikel zum thema mit - aus meiner sicht - überzeugenden argumenten: http://databases.aspfaq.com/database/should-i-store-images-in-the-database-or-the-filesystem.html

cx

DokuLeseHemmung
06.06.2009, 12:45:36
Stimmt, die Argumente sind gut!
z.B.:
storing the BLOB directly in the database - which gives you greater transactional control and consistency.

Auch stimmt es, dass nicht jedes DBMs uneingeschränkt dafür geeignet ist. Klar, muß man sich ab und an nach der Decke strecken.

ASP !== PHP
MsSQL !== MySQL

Auch wenn ein Zugriffsschutz integriert werden soll, z.B. über Session, dann kommst du sowieso nicht drumrum die Daten per PHP o.ä. ausliefern zu müssen. Damit ist schon mal das halbe SpeedArgument tot. Dazu noch eine kleiner Cache und es bleiben nur noch ein paar MilliSekunden, über die man sich fetzt.


ich bleibe bei meinem standpunkt.
Das sei dir ungenommen!
Bedenke aber, dass die Gründe für dieses Weg in Unzulänglichkeiten des Systems und evtl. auch in performance Fragen zu suchen sind. Dein Weg ist also ein Kompromiß, nicht der unbedingt ideale, oder gar wünschenswerte.
Ich sehe ihn als "beabsichtigte Denormalisierung". Und das zieht immer einen Rattenschwanz, von zu lösenden Problemen, hinter sich her.

Am Rande:
Wer einmal begriffen hat wie ein Hammer funktioniert, für den sieht die ganze Welt wie ein Nagel aus.

knight1
06.06.2009, 14:20:36
Hi Leute,
ich suche mir schon genau in welchen Fall ich Dateien in der Datenbank speichere und wann nicht.
Bei der Webseite um dies es geht habe ich zum Beispiel insgesammt pro Datenbank nur 100MB Speicherplatz.
Bei der Tabelle um die es in meiner Frage geht handelt es sich um eine Link-Tabelle. Da kommen nur Bilder mit unter 5KB Datei-Größe rein. Das werden von der Menge auch nciht viele werden.
Eine andere Tabelle bekommt die Referenzen. Da werden Bilder angezeigt die bis zu 500KB groß sein können und von der Anzahl der Dateien werden es sehr viel mehr werden. Daher kommen diese Bilder nicht in die Datenbank.


Außerdem habe ich festgestellt dass, solange es sich nur um Dateien handelt die nicht größer sind als 5-6KB es keine Performance probleme gibt.




Kai aka Knight1