Dateiablage

HinnackX1

Benutzer
Beiträge
6
Hallo Zusammen,

für ein Projekt will das Unternehmen Dateien in der Datenbank (BLOB) speichern.
In unserer Abteilung wird über den Sinn dieses Vorhabens diskutiert.

Ich möchte hier gerne ein paar Erfahrungswerte sammeln.
Hat das jemand schon mal gemacht ?

Hier noch ein paar Parameter:
- Dateigrößen: 100 KB bis 5 MB
- User: 100 Bis 200
- DBMS: Oracle 12c

Vielen Dank im Vorraus.
 
Werbung:
Es gibt Vor- und Nachteile. Vorteil wäre, daß die Dateien durch die DB ebenfalls unter transaktionale Kontrolle stehen. Nachteil ist der höhere Aufwand für die DB.

Die Frage ist also eher, welche Vorteile wollt ihr nutzen und welche Nachteile seid ihr bereit dafür zu zahlen.
 
Momentan speichern wir Dateien auf einem Dateiserver und den Verweis zu der Datei in die DB.

Wir möchten das Speichern von Dateien zentralisieren. Als Nachteil nehmen wir erhöhte Rechenleistung und erhöhter Speicherverbrauch in Kauf.
 
Ein weiterer Nachteil ist, dass das Backup der Datenbank selbst damit wesentlich länger dauert und ein eigener Dateiserver die Datenbank entlastet.
 
Bei der Frage ob die Dateien als BLOBs gespeichert werden sollen, ist auch wichtig, ob externe Tools darauf zugreifen müssen. Bei Bildern könnte das z.B. eine Kommandozeilen Tool zum Skalieren sein. Oder ein Webserver der die Dateien direkt ausliefert.

Bei Oracle BLOBs ist ganz wichtig diese als "SECUREFILE" zu definieren, da sonst die Speicherung sehr ineffizient ist.

Wenn ihr viele UPDATEs auf die BLOBs habt, dann müsst ihr auch die Einstellungen für RETENTION an den Spalten fein-tunen, da BLOB Updates bei Oracle nicht über das normale UNDO Log laufen, sondern einfach eine neue Kopie des BLOB gespeichert wird. Das kann bei vielen UPDATEs zu einem überproportionalen Anwachsen des Tablespace führen.

Sinnvoll ist sicher auch die Kompression dafür einzuschalten (dafür ist aber eine Enterprise Edition notwendig!) - nutzt natürlich nichts wenn die Dateien schon komprimiert sind (z.B. JPGs oder ZIP Archive).

Ich würde auch einen eigenen Tablespace dafür einrichten, damit der "normale" damit nicht aufgebläht wird.

Sowas in der Art:
Code:
create table media
(
   id           integer primary key,
   blob_data    blob
)
lob (blob_data)
store as securefile
(
  tablespace blob_data
  compress high --- Achtung EE notwendig!!
  retention auto
  nocache
);

Unter Umständen sogar " retention none" verwenden. Das könnte z.B. bei lang laufenden Transaktionen und gleichzeitigen Zugriff auf "snapshot too old" Fehler hinauslaufen, braucht aber deutlich weniger Speicherplatz.

Das nocache sorgt dafür, dass das Lesen von großen Daten nicht durch den Buffer Cache geht und ein einzelner großer BLOB viele andere Datensätze aus dem Cache verdrängt.

Wenn ihr damit rechnet, dass die gleiche (=identische) Datei mehrfach gespeichert wird, könnte man auch noch die "DEPLUCATION" einschalten (auch dafür ist die Enterprise Version erforderlich!)
 
Wird die Datenbank um 0,00001% , 1% oder 10 % mehr belastet ?

Eine ähnliche Frage wäre: um wieviel Prozent belastet zusätzliches Gewicht ein Fahrzeug, ohne zu verraten ob es ein PKW oder ein LKW ist; ob es um ein Päckchen mit 3 kg geht, einen Menschen oder 20 Tonnen; ob das Fahrzeug stündlich 2km fährt oder wöchentlich 800km; etc

Was ist überhaupt eure Intention? Woher kommt der Wunsch? Und wer greift auf die Daten zu (siehe Antwort von @castorp )
 
@castorp
Danke erstmal für den Beitrag.

Ja, ein Tool muss auf die Dateien zugreifen. Das Tool soll aber nur kleine Dateien (< 5 MB )speichern.

Danke das mit dem SECUREFILE wusste ich nicht.

UPDATEs werden nur ausgeführt um ein Flag zu setzen, welche die Datei dann als gelöscht markiert. (passiert ehr selten)

Belastet eine Kompression nicht auch die Datenbank ?
 
Ja, ein Tool muss auf die Dateien zugreifen. Das Tool soll aber nur kleine Dateien (< 5 MB )speichern.
Ich bezog mich auf "externe" Tools wie z.B. ein WebServer (Apache), ImageMagick oder andere Tools die ausschließlich mit Dateien im Dateisystem arbeiten können.

UPDATEs werden nur ausgeführt um ein Flag zu setzen, welche die Datei dann als gelöscht markiert. (passiert ehr selten)
Ich bezog mich auf UPDATEs der eigentlichen BLOB Daten, nicht auf andere Spalten der Tabelle - die sind unkritisch unabhängig von der Speicherung der BLOB Daten.

Belastet eine Kompression nicht auch die Datenbank?
Mit moderner Hardware ist das meiner Meinung nach nicht messbar. Ihr könnt ja mal mit "compression medium" vs. "compression high" experimentieren. Wie bereits erwähnt hängt das von den Daten ab. Wenn das alles eh schon komprimierte Daten (JPG, ZIP, DOCX) sind, macht das Einschalten gar keinen Sinn.
 
@Walter
Der Auftrag kam von meinem Chef. Auftrag ist es das Speichern von Dateien in die Datenbank zu realisieren. Interne und Externe Mitarbeiter unserer Firma müssen auf die Dateien zugreifen können.
 
Werbung:
Ich bezog mich auf "externe" Tools wie z.B. ein WebServer (Apache), ImageMagick oder andere Tools die ausschließlich mit Dateien im Dateisystem arbeiten können.
Achso. Nein nur unsere eigen entwickelten Programme greifen darauf zu.

Ich bezog mich auf UPDATEs der eigentlichen BLOB Daten, nicht auf andere Spalten der Tabelle - die sind unkritisch unabhängig von der Speicherung der BLOB Daten.
Dann nein. Die eigentlichen BLOB Daten werden nicht verändert.
 
Zurück
Oben