Zum Inhalt springen

Bilder speichern in Datenbank


Feuer017

Empfohlene Beiträge

Hallo erstmal,

ich habe mich gerade eben hier angemeldet, da ich nur positives über das Forum gehört habe.

Folgendes Problem:

Ich möchte eine Datenbank erstellen in der verschiedene Bilder aus einem bestimmten Dateipfad gespeichert werden.

Ich würde den Bildern jeweils noch gerne ein "Parameter" mitgeben.

z.B. ich habe 3 Bilder, ein rotes, ein blaues und ein schwarzes.

Dann möchte ich die Bilder in der Datenbank einlasen und jeweils den Paramater mitgeben "schwarz, blau oder rot".

Damit ich später in der Datenbank filtern kann nach den 3 Farben und mir nur die Bilder der gewünschten Farbe ausgeben kann.

Also diese Bilder die mit dem gewünschten Parameter gekennzeichnet sind.

Wie würdet Ihr das lösen?

Danke im voraus!!!

Liebe Grüße

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich verstehe dein Problem nicht wirklich.

Wenn du ein Bild in einer Datenbankspeichern willst und dazu noch ein Attribut (Farbe) musst du halt eine dementsprechende Table anlegen?

Z.B.:

CREATE TABLE IF NOT EXISTS `test` (

  `id` int(11) NOT NULL AUTO_INCREMENT,

  `image` blob NOT NULL,

  `color` varchar(50) NOT NULL,

  PRIMARY KEY (`id`)

);

Bearbeitet von sas86ks
Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo,

dankeschön für die schnellen Antworten, ist ja schon eine Antwort bevor man überhaupt gefragt hat!! :-)))

Also das komplette Programm soll so aussehen:

Ich bekomme verschiedenste Bilder in einem Ordner auf meinem PC gespeichert. (10 Stk, 100 Stk, 1000 Stk., kann man im voraus nicht sagen)

Alle Bilder wurden nach verschiedenen Kriterien gefiltert. (Rotpunkte, Blaupunkte, tiefe, schärfe usw. werden am ende aber mehr als nur 3-4 Kriterien)

Ob ich die Bilder einspeichern oder nur verweisen möchte, bin ich mir grade selbst noch nicht ganz sicher, da ich noch schauen muss wie viele Bilder es immer ca. sind. Ob es sich dann noch lohnt die Bilder direkt zu speichern..

Am ende möchte ich dann bei einer Abfrage nur die Bilder ausgegeben haben, bei denen das Kriterium zutrifft das ich auswähle (Zeige nur Bilder mit Rotpunkten).

Ich hoffe es ist etwas verständlich erklärt, habe leider nicht wirklich viel hintergrundwissen in dieser Hinsicht.

Danke nochmals!! :)

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 2 Wochen später...

Als ich den Titel las musste ich gleich nach ein paar Links suchen, die Du Dir zu Gemüte führen solltest:

SQL SERVER – Do Not Store Images in Database – Store Location of Images (URL) | Journey to SQL Authority with Pinal Dave

Three things you should never put in your database

performance - To Do or Not to Do: Store Images in a Database - Stack Overflow

Im Normalfall schafft man sich eher Probleme, wenn man Dateien als BLOB in einer Datenbank ablegt und es gibt nur sehr, sehr wenige Gründe, wann sich ein solches Vorgehen lohnt.

Ich darf hier ein (recht kleines) ASP.Net Web-Projekt betreuen in dem man sich, entgegen meines Rates, genau dazu entschlossen hatte, Bilder als Blob abzuspeichern - pro Jahr kommen an die 40 GB an Bildern zusammen, welche archiviert und aufbewahrt werdern müssen.

Ein Datenbankbackup ist dann am einfachsten eine eben viele GB große Datei - das ist bei Backup/Restore irgendwie unhandlich und man kommt schlecht "mal eben" an ein einzelnes Bild. So war es dann Kundenwunsch, die Bilder auch auf DVD zu bekommen und ein kleines Exporttool, welches die Bilder wieder als Datei ausgibt, war von nöten. Im Endeffekt haben wir die Daten jetzt halt immer zwei mal und man hätte sich das Speichern und der DB sparen können. :)

Ich erinnere mich auch an meine Ausbildungszeit, in der ich es am Rande mit einem ERP System zu tun hatte, welches MS-Word Dateien als Vorlagen benutzte und diese in eine Datenbank speicherte - schön bis $Kunde mal ein Makrovirus erwischte. Logischerweise waren die Virenscanner nicht in der Lage, die abgespeicherten Dokumente in der Datenbank zu bereinigen, so was eine fiese Export-/Importprozedur anstand.

tl;dr :

Am besten nimmt man zum Speichern von Dateien das vom Betriebssystem dafür vorgesehene und optimierte Dateisystem und keine relationale Datenbank..

Link zu diesem Kommentar
Auf anderen Seiten teilen

Am besten nimmt man zum Speichern von Dateien das vom Betriebssystem dafür vorgesehene und optimierte Dateisystem und keine relationale Datenbank..

Ich hab mich zwar noch nicht damit außeinander gesetzt, aber FileTables von MSSQL sehen ganz gut aus und beheben soweit ich das verstanden habe, die von dir genannten Nachteile. Leider hat sich der TE noch nicht dazu geäußert, welche Datenbank er einsetzt.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Natürlich ist es problemlos möglich, Bilder und andere Dokumente in einer Datenbank abzulegen. 7 Jahre alte Links zu posten oder Blogeinträge die sich selbst Widersprechen helfen allerdings nur bedingt weiter.

Alle aufgezeigten Probleme bzw. sogar weitere hat man auch, wenn man zig tausende oder Millionen Dateien old fashioned im Filesystem ablegt. Der Makrovirus ist natürlich auch in der Sicherungsdatei vorhanden, das Recovery der Bilder zusammen mit einem bestimmten Datenbankstand ist quasi unmöglich und eine Transaktionsklammer existiert nicht.

Das ewig alte Argument "Performance" muss immer auf die verwendete Datenbank bezogen werden. Wir haben mit Oracle Secure Files diesbezüglich sehr gute Erfahrungen, man muss eben wissen wie's geht.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Naja, ich sprach vom "Normalfall" - natürlich konnte man schon anno Tobak auf dem "richtigem" System (Hallo AS/400 mit DB2) große Objekte sinnvoll in einer Datenbank ablegen.

@dr.dimitry: Wie groß sind denn die Blobs, die Ihr ablegt? Anzahl/Größe/Zugriffe? Auf welcher Hardware habt ihr das im Einsatz? Was kostete die Hardware + Lizenz für die Datenbank? :)

Bitte beachte, dass wenn jemand so unbeleckt wie Feuer017 im Eingangsposting fragt man kaum von vorhandenen großen Eisen und Wissen zur Bedienung dessen ausgehen kann.

Dein Einwand "bei Oracle kein Problem" hilft dem OP nicht unbedingt weiter - und die Links (von 2012?) von mir weisen auf jahrelange Erfahrung von zig Admins - die Leute bei Google und Facebook speichern ihre Blobs eben auch NICHT in dicken DBMS..

Die FileTables von SQL 2012 entsprechen auch nur der Ablage im Dateisystem mit übergestülptem DBMS-Kram - das mag bei gerade in Puncto Transaktionen, etc. von Vorteil sein - kann aber wieder andere Nachteile bringen.

Kommt auf den Anwendungsfall an, ob das sinvoll ist - Ich bin mir immer noch relativ sicher dass in >99% aller Fälle, in denen jemand auf die Idee kommt, Unmengen an unstrukturierten Daten als BLOB in eine Datenbank zu prügeln dies nicht unbedingt die beste Lösung ist.

Möge der OP doch mal erläutern, welche Software ihm denn so als Front- und Backend vorschwebt, was er an Ausrüstung zur Verfügung hat und welche Datenmenge er erwartet.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Wie es RipperFox schon gesagt hat, habe ich wenig bis fast keine Ahnung in Sachen SQL.

Ich bin seit ein paar Wochen neben meinem Job in einem Abendkurs für Programmierung, unteranderem SQL.

Die Aufgabe lautet, dass ich verschiedenste Bilder bekomme und diese mit einer "info" passend zum Bild speichern soll. (Info: Rotpunkte)

Wie viele Bilder das wären, kommt immer auf den Benutzer der Bildbearbeitungssoftware an, 10 / 100 / 1000.

Welche DB ich nutze ist egal und kann ich selbst raussuchen, es soll nur auf SQL Ebene funktionieren.

Ich bin jetzt gerade dabei mich in die Themen einzulesen von RipperFox, um etwas mehr Verständnis für den Bereich zubekommen.

Was genau wäre jetzt eure Überlegung/Idee?

Welche DB?

Abspeichern oder nur Verweisen?

Dankeschön für eure super Hilfe!! Ich bin echt begeistert :) :)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich würde es für einen Pfrogrammierkurs erst einmal lassen, Bilder in Datenbanken zu speichern, da gibt es einfach zu viel, auf was man achten muss, damit es effizient ist. Ich würde einfach das Bild irgendwo ablegen und dann den Dateinamen und die entsprechenden Informationen dazu speichern. Solange du keine Berechtigungen, Zugriffe usw. darauf beachten musst, reicht das. In einem produktiven System sieht es leider anders aus.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ja, du musst nicht mal den Pfad speichern, wenn er in deinem Programm bekannt ist, sondern nur den Dateinamen. Vorausgesetzt natürlich, alle sind im gleichen Verzeichnis. Ansonsten kannst du noch ein Verzeichnis mit angeben. Ob dann eine extra Spalte oder Tabelle für das Verzeichnis Sinn macht, musst du wissen (zB wenn es sich ändert).

Link zu diesem Kommentar
Auf anderen Seiten teilen

So, ich habe mich entschieden, die Bilder nicht in der DB zuspeichern sondenr nur einen Verweis, sprich den Link angeben.

Ich habe jetzt bei MySQL WorkBench 3 Tabellen erstellt. Eine für den Pfad, eine für die Parameter/Info die ich mitgeben will (ROt/BLAU..) und eine Tabelle zum zusammenfügen und von der ich am ende abfrage.

Dadurch muss ich jeden Parameter nur einmal anlegen und habe später nicht 1000 mal "ROT" oder "BLAU" in einer Datenbank.

Jetzt habe ich in Visual Studio per C# eine kleine Oberfläche gemacht, wo ich einfach nur für den Anfang den Inhalt der Tabelle ausgeben möchte.

Nur kommt jetzt das Problem, wie verbinde ich die DB in C#?

Habe im Internet mir ein paar Tutorials angeschaut, leiter waren alle viel auswendiger und sprengten den Rahmen.

Ich brauche einfach nur eine simple Verbindung von meinem C# Programm auf meine SQL Datenbank.

Dankeschön :) :)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...