Frage

Ich bin über eine Funktion in unserer Anwendung zu implementieren, die den Benutzer auf ‚Upload‘ PDF oder Microsoft Powerpoint-Dokument, das die Anwendung wird dann zur Verfügung stellen, um andere Benutzer in einem Viewer (so dass sie nicht bekommen können zu 'Download' es in den 'Speichern unter ..' Sinn).

Ich weiß schon, wie beliebige binäre Informationen in Datenbankspalten zu speichern und abzurufen, aber da dies ein häufig verwendetes Merkmal unserer Anwendung wird befürchtet ich, dass Lösung enorm große Datenbank-Tabellen führen würde (wie wir einen unserer Kunden wissen wollen Videos in Powerpoint-Dokumenten setzen).

Ich weiß, es ist ein Weg, ein ‚Verzeichnis‘ Objekt in Oracle zu schaffen, aber ist es eine Möglichkeit, diese Funktion zum Speichern und Abrufen von Binärdateien an anderer Stelle auf dem Datenbank-Server gespeichert?

Oder bin ich über die Datenbankgröße übermäßig paranoid zu sein?

(auf Vollständigkeit unserer Anwendung ist WinForms .NET Corelab / DevArt OraDirect.Net Treiber Oracle 10g)

War es hilfreich?

Lösung

Ein paar Möglichkeiten: Sie können die BLOB-Spalte in einer eigenen Tabellen setzen, mit einer eigenen Lagereigenschaft; Sie könnten die BLOBs in ihrer eigenen Tabelle speichern, auf die anderen Tabelle durch eine ID-Spalte verknüpft. In jedem Fall, wie Sie vorgeschlagen, dass Sie die Spalte als BFILE, die die eigentliche Datei bedeuten definieren könnten extern aus der Datenbank in einem Verzeichnis gespeichert. Was könnte ein Problem sein, es ist, dass BFILE LOB beteiligen sich nicht an Transaktionen und sind nicht erstattungsfähig mit dem Rest der Datenbank.

Das ist alles in der Oracle 10gR2 SQL-Referenz diskutiert, Kapitel 2, ab Seite 23.

Andere Tipps

Ich denke, es hängt davon ab, was man bedenkt, enorm groß.

Es ist wirklich abhängig vom Anwendungsfall. Wenn die Dokumente nur zugegriffen werden selten dann in der Datenbank setzen wäre schön (mit dem Vorteile der „freie“ Backups bekommen, zum Beispiel mit der Datenbank).

Wenn diese Dateien, die älter als sein gehen zu treffen und immer wieder, könnten Sie besser sein, sie auf der Festplatte direkt zu setzen und speichern nur die Position oder sogar (wenn seine wirklich hohe Bandbreite) buchen, in so etwas wie MogileFS

Niemand in der Lage sein wird Ihnen ein Ja geben oder keine Antwort für diesen.

Sie können einen normalen LOB-Spaltentyp verwenden und die Speicherparameter für das Feld so eingestellt, dass es auf einem separaten Tabellenbereich ist. Erstellen Sie die Tabellen irgendwo, dass umgehen kann riesige Datenmengen, die auf sie geworfen und Sie werden die Auswirkungen minimieren.

Um über Festplattennutzung ernsthaft Super paranoid Sie zusätzlich die Tabellen durch Kennzeichnung als solche komprimieren können. Etwas entlang der Linien von:

CREATE TABLE   binary_data1 DATENDATEI   some_san_location STANDARD COMPRESS STORAGE (...)

Nach meiner Erfahrung ein einfaches VARCHAR2 Feld der Dateinamen der Anhänge enthält, ist eine bessere und einfachere Lösung. Dateisystemgröße ist viel einfacher zu handhaben als die Datenbankgröße.

Die Daten haben irgendwo zu leben, wäre es an die DB internen ist oder ob Sie speichern nur einen Link zu einem (Server) zugänglich Dateipfad, sind Sie immer noch Raum zu kauen.

Ich habe gerade verwendet einfaches LOB Felder in der Vergangenheit, wie es schien gut zu funktionieren. Wenn Sie die Daten innerhalb der DB zumindest halten halten Sie Ihre Backup-Probleme niedrig - Sie viele Daten haben zu sichern, aber wenn Sie es wiederherstellen, wird es alle da sein. Die Aufteilung der binären out bedeutet, dass Sie möglicherweise die DB brechen oder Daten verlieren, wenn Sie nicht vorsichtig sind, was Sie Sicherung.

Ein Grund nur den Link zu speichern oder eine ID, die verwendet werden können, um den Link zu bauen ist, dass die Lagerung, die Sie in der Regel für Oracle DB verwenden ist ziemlich teuer. Wenn Sie viele großen Dateien haben, ist es in der Regel viel kostengünstiger, sie auf ein weniger teures Array von Festplatten zu setzen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top