Hakan: Archievierung von Images(Bildern) in Oracle

Beitrag lesen

Moin!

Wie soll ich die Namen der Bilder behandeln ? Soll ich sie so lassen wie sie sind oder eine laufende Nummer als "IDxyz.jpg" generieren lassen.

Da ein Dateisystem ja auch eine Datenbank ist, welche darauf spezialisiert ist, in sich abgeschlossene Binärdatenströme (auch Dateien genannt) zu verwalten, ist eine Veränderung des Dateinamens nicht notwendig. Die Kombination aus Pfadname und Dateiname ist eindeutig.

Zu beachten ist, dass es performancemäßig eher ungünstig ist, sehr viele Dateien in einem einzigen Verzeichnis zu haben. Es macht Sinn, nach irgendeiner zu findenden Strukturvorgabe die Dateien in verschiedene Verzeichnisse aufzuteilen. Im Zweifel kann man als Struktur beispielsweise den Dateinamen nehmen (und muß dann dafür sorgen, dass dieser global eindeutig ist, nicht nur je Verzeichnis).

Als Beispiel:

/imagepfad/A/B/B/abbildung.tif
/imagepfad/B/E/L/beleuchtung.jpg

Dachte auch an die vergabe von Schlüsselwörtern an die Bilder.(Metadaten).

Das ist dann Aufgabe der begleitenden Datenbank.

Wie sieht es dann aus wenn sich die Verzeichnisstruktur verändert ?

Das sollte nicht passieren müssen.

Ist es möglich aus einer CD Bilder in die DB einzulesen ?

Importmöglichkeiten sind natürlich frei programmierbar.

Bei diesem Projekt ist das wesentliche das suchen und finden der BIlder.

Dann wirst du mit großer Wahrscheinlichkeit Thumbnails der Bilder generieren wollen, welche ihrerseits wieder ganz sinnvoll in einem Dateisystem abgelegt werden.

Ansonsten bist du für die Verwaltung und Durchsuchung der Metadaten mit der Datenbank zuständig und verantwortlich.

- Sven Rautenberg

Hi,

danke erstmal für die Tipps.Werde ich jetzt mal so bewerten und ein Prototyp entwickeln.

Wie ist es mit InterMedia für Oracle?
InterMedia definiert ja neue Datentypen um Multimediadaten zu beschreiben.
Als Grunddatentyp wird "ORDSource" definiert.
ORDSource implementiert die grundsätzliche Speicherung und Verwaltung der Daten in Oracle.

Die verwendeten Datentypen sind im einzelnen:

ORDAudio für Audiodaten  ->  nicht releveant

ORDImage für Bilddaten   ->  für mich relevant

ORDVideo für Videodaten  ->  nicht relevant

CLOB für Textdaten       ->  nichtrelevant

In diesen Klassen werden Mediendaten und Metadaten gespeichert.

Ich würde dann die Daten extern speichern mit einem BFILE.
Hab aber gelesen, dass man nur jewéisl bis zu 4 GB an Daten speichern kann.
Wie mache ich das denn bei größerern Mengen ?
Ist es überhaupt sinnvoll InterMeida zu verwenden ?

Hier mal ein Beispiel wie ich es machen würde:

CREATE TABLE      Bilder(
Bildername        VARCHAR(50),
größe             INTEGER,
Beschreibung      VARCHAR(50),
photo             ORDSYS.ORDImage);

Hier soll man die Bilddaten aufnehmen!

DECLARE

Image ORDSYS.ORDImage;

BEGIN

INSERT INTO Bilder VALUES ('test', 240, 'Test Bild',

ORDSYS.ORDImage.init('file','ORDIMAGEDIR','test.gif'));

SELECT photo INTO Image FROM Bilder WHERE Bildername = 'test' for UPDATE;

Image.setProperties;

UPDATE Bilder SET photo = Image WHERE Bildername = 'test'; COMMIT;

END;

Der Konstruktor (Zeile 5) benötigt nun als Parameter den Pfad, den Dateinamen und das Kennwort 'file' um die Bilddaten mit Hilfe eines BFILE zu speichern. Dabei wird in dem BFILE die Datei test.gif aus dem Verzeichnis ORDIMAGEDIR referenziert. In Zeile 6 wird die entsprechende Zeile in der Spalte photo für ein Update selektiert, in Zeile 7 die Properties des Bildes gesetzt und in Zeile 8 das Update durchgeführt, indem die Daten aus Image in der entsprechenden Zeile in die Spalte photo kopiert werden.

Ich könnte doch ein beliebiges Verzeichnis auswählen also über die Web Applikation z.B. ein Optionsbutton  "dursuchen" und das ausgewählte Verzeichnis rekursiv durchlaufen und jedes gefundene Bild dann in meiner DB also Tabelle speichern oder ???????

Ich muss das Projekt umbedingt schaffen und würd mich über jede Anregung und Hilfe sehr freunen.
Natürlich verlange ich nicht das man mir es vorzeigt sondern, diejenigen die schon mal so etwas gemacht haben einige Tipps, ob das so machbar ist wie ich mir das Vorstelle.

Ich würde dann ein in PHP ein Skript ertsllen für die Verbindung in die Oracle Datenbank und ein weiteres vielleicht auch mehrere für das finden und suchen der Bilder.
Und anschließend in Browser ausgeben.

Viele Grüße

Hakan